Django 基础教程

Django 查询

Django 展示数据

Django Admin

Django 模板

Django 表单组件

Django 高级

Django FAQ

original icon
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.knowledgedict.com/tutorial/django-template-view.html

Django view 视图和 template 模板联动的不同方法详解


在 Django 中,视图(Views)和模板(Templates)是 MVC(Model-View-Controller)架构的一部分,用于处理 Web 应用程序的业务逻辑和用户界面展示。视图负责处理请求并返回响应,而模板负责渲染 HTML 内容以呈现给用户。下面我会分别详细介绍使用 TemplateView 类和 render 函数结合 context 参数的方法。

方法一:使用 TemplateView 类

TemplateView 是 Django 提供的一个内置视图类,用于简单地显示一个静态模板。它可以将模板和视图结合在一起,以便轻松地显示一个静态页面。

首先,在 Django 项目中的 views.py 文件中,导入 TemplateView 类:

from django.views.generic import TemplateView

然后,定义一个继承自 TemplateView 的视图类,并设置 template_name 属性为要渲染的模板路径,并重写 get_context_data 方法来添加自定义的上下文数据:

from django.views.generic import TemplateView

class MyTemplateView(TemplateView):
    template_name = 'myapp/my_template.html'

    def get_context_data(self, **kwargs):
        # 调用父类的get_context_data方法,获取默认的上下文数据
        context = super().get_context_data(**kwargs)

        # 添加自定义的上下文数据
        context['custom_data'] = 'This is a custom variable passed to the template!'

        return context

在上面的代码中,我们在 get_context_data 方法中添加了一个名为 custom_data 的自定义变量。

urls.py 文件中,配置 URL 与 MyTemplateView 视图类的映射关系,与之前的示例一样:

from django.urls import path
from .views import MyTemplateView

urlpatterns = [
    path('my-template/', MyTemplateView.as_view(), name='my_template'),
]

编写模板文件 my_template.html

<!DOCTYPE html>
<html>
<head>
    <title>My Template</title>
</head>
<body>
    <h1>Hello, this is a template rendered using TemplateView!</h1>
    <p>{{ custom_data }}</p>
</body>
</html>

在上面的模板文件中,我们使用 {{ custom_data }} 来显示 get_context_data 方法中添加的自定义数据。

现在,当你在浏览器中访问 URL /my-template/,它将显示 my_template.html 模板中的内容,并显示我们添加的自定义数据,即“Hello, this is a template rendered using TemplateView!”和“This is a custom variable passed to the template!”。

方法二:使用 render 函数和 context 参数

另一种常见的方法是使用 render 函数将数据传递给模板。在这种情况下,你可以动态地生成 HTML 内容并将其与特定的数据一起呈现。

views.py 文件中,你需要导入 render 函数:

from django.shortcuts import render

然后,定义一个视图函数,使用 render 函数来渲染模板,并通过 context 参数传递数据给模板:

from django.shortcuts import render

def my_view(request):
    # 获取需要传递给模板的数据
    my_data = "Hello, this is data passed to the template!"
    my_list = [1, 2, 3, 4, 5]
    
    # 使用render函数渲染模板并传递数据给模板
    return render(request, 'myapp/my_template.html', {'data': my_data, 'my_list': my_list})

在上面的代码中,myapp/my_template.html 是模板文件的路径,{'data': my_data, 'my_list': my_list} 是一个字典,它将数据传递给模板。在模板中,你可以使用 {{ data }}{{ my_list }} 来访问这些数据。

<!DOCTYPE html>
<html>
<head>
    <title>My Template</title>
</head>
<body>
    <h1>{{ data }}</h1>
    <ul>
        {% for item in my_list %}
        <li>{{ item }}</li>
        {% endfor %}
    </ul>
</body>
</html>

在上面的模板文件中,{{ data }} 将显示视图函数传递的字符串数据,而 {% for item in my_list %}{{ item }} 将迭代列表并将列表项显示在页面上。

无论使用 TemplateView 类还是 render 函数,最终都会将数据传递给模板,并将其与模板中的 HTML 内容结合,从而呈现最终的页面。方法的选择取决于你的具体需求,如果仅需显示一个简单的静态页面,可以使用 TemplateView 类;如果需要在视图函数中处理更多的逻辑和动态数据,可以使用 render 函数。