Django 模板
在 HelloWorld 目录底下 创建 templates 目录并 新建 runoob.html文件,整个目录结构如下:
HelloWorld/
|-- HelloWorld
| |-- __init__.py
| |-- __init__.pyc
| |-- settings.py
| |-- settings.pyc
| |-- urls.py
| |-- urls.pyc
| |-- views.py
| |-- views.pyc
| |-- wsgi.py
| `-- wsgi.pyc
|-- manage.py
`-- templates`-- runoob.html
runoob.html 文件代码如下:
HelloWorld/templates/runoob.html 文件代码:
<h1>{{ hello }}</h1>
从模板中我们知道 变量使用了双括号。
接下来向Django说明模板文件[runoob.html]的路径,修改HelloWorld/settings.py,修改 TEMPLATES 中的 DIRS 为 [os.path.join(BASE_DIR, ‘templates’)] 。
(templates即模板文件所在的目录)(DIRS的初始值是:‘DIRS’: [])
如下所示:
HelloWorld/HelloWorld/settings.py 文件代码:
TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR, 'templates')], # 修改位置'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},
]
修改 views.py,增加一个新的对象,用于向模板提交数据
HelloWorld/HelloWorld/views.py 文件代码:
from django.shortcuts import renderdef runoob(request):context = {} #定义一个空字典context['hello'] = 'Hello World!'return render(request, 'runoob.html', context)
一、什么是render函数
render函数是Django框架中的一个函数,它的作用是将数据和模板进行结合,生成最终的HTML页面。在使用Django开发Web应用程序时,我们通常会使用render函数来渲染页面。
二、render函数的用法
render函数的用法非常简单,它只需要接收三个参数:
request: 表示HTTP请求对象,它包含了客户端发送的所有数据。我们通常会使用request对象来获取客户端发送的数据,例如GET或POST请求中的参数。
template_name: 表示模板文件的名称,它通常位于应用程序的templates目录下。
context: 表示一个字典,它包含了需要传递给模板的数据。
三、常见问题
render函数找不到模板文件
在使用render函数时,如果指定的模板文件不存在,就会出现找不到模板文件的错误。通常情况下,我们需要确保模板文件的名称和路径都是正确的,并且位于应用程序的templates目录下。render函数无法传递数据
在使用render函数时,如果无法将数据传递给模板,就会出现无法渲染页面的错误。通常情况下,我们需要确保context参数包含了需要传递给模板的数据,并且这些数据的键值对是正确的。render函数无法渲染页面
在使用render函数时,如果无法渲染页面,就会出现无法显示页面的错误。通常情况下,我们需要确保模板文件中的语法是正确的,并且模板文件中的变量和标签都能够正确地解析和渲染。
HelloWorld/HelloWorld/urls.py 文件代码:
from django.urls import pathfrom . import viewsurlpatterns = [path('runoob/', views.runoob),
]
urls.py的作用:根据url匹配相应视图函数。
此处将runoob路径的映射,匹配views.py中的runoob函数。
return得到向runoob.html中的传递context数据,context字典数据中的hello匹配模板runoob.html中的{{ hello }}变量。
再次访问 http://127.0.0.1:8000/runoob,可以看到页面:
总结
使用 render 来替代之前的 HttpResponse,使用模板来输出数据,实现数据(view.py)与视图(runoob.html)分离。
view.py 视图(向模板(前端页面)传递数据,此处认为,视图(view.py)即数据源)
Template 模板