上一篇中讲诉了关于Django 2.1.7 视图的操作,本篇章开始研究模块这块内容。
参考文献
官网文档
创建模板
在 assetinfo 目录里创建一个 templates 目录。Django 将会在这个目录里查找模板文件。在刚刚创建的 templates 目录里,再创建一个目录 assetinfo,然后在其中新建一个文件 index.html 。换句话说,模板文件的路径应该是 polls/templates/polls/index.html 。因为 Django 会寻找到对应的 app_directories ,所以你只需要使用 polls/index.html 就可以引用到这一模板了。
目录结构如下:
定义模板
编写index.html,写入一个标题,后续通过视图引用。代码如下:
代码语言:javascript复制<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>Hello world</h1><br>
<p>{{ info }}</p><br>
{%for i in list%}
{{i}}<br>
{%endfor%}
</body>
</html>
在模板中输出变量语法如下,变量可能是从视图中传递过来的,也可能是在模板中定义的。
代码语言:javascript复制{{变量名}}
在模板中编写代码段语法如下:
代码语言:javascript复制{%代码段%}
上面的例子在代码段里面写的是for循环的语法。
代码语言:javascript复制 {%for i in list%}
{{ i }}
{%endfor%}
另外if判断的语法如下:
代码语言:javascript复制{% if latest_question_list %}
<ul>
{% for question in latest_question_list %}
<li><a href="/polls/{{ question.id }}/">{{ question.question_text }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>No polls are available.</p>
{% endif %}
视图调用模板
调用模板分为三步骤:
- 1.找到模板
- 2.定义上下文
- 3.渲染模板
打开assetinfo/views.py文件,调用上面定义的模板文件
代码语言:javascript复制from django.http import HttpResponse
from django.template import loader
def index(request):
# 1.获取模板
template = loader.get_template('assetinfo/index.html')
# 2.定义上下文
context = {
'info':'资产管理',
'list': ['测试服务器','redis服务器','memcached服务器','nginx服务器'],
}
# 3.渲染模板
return HttpResponse(template.render(context, request))
使用浏览器访问测试如下:
可以看到浏览器都渲染好了传递的数据。从上面的三个步骤操作,的确可以传递数据,但是就会觉得这样重复去写的话,会很麻烦。那么是不是可以将三个步骤抽出来一个方法,然后快速执行呢?
自定义调用模板方法
代码语言:javascript复制from django.http import HttpResponse
from django.template import loader
def my_render(request, template_file, context):
# 1.获取模板
template = loader.get_template(template_file)
# 2.定义上下文
context = context
# 3.渲染模板
return HttpResponse(template.render(context, request))
def index(request):
context = {
'info': '资产管理',
'list': ['测试服务器', 'redis服务器', 'memcached服务器', 'nginx服务器'],
}
return my_render(request, template_file='assetinfo/index.html', context=context)
可以看到,抽出一个方法之后,很多重复的步骤就不用写了。主要的工作主要定义好内容的context即可。
测试访问正常如下:
其实Django提供的一个render()方法就是已经实现了这个功能了。
使用Django的render()方法调用模板
代码语言:javascript复制from django.shortcuts import render
def index(request):
context = {
'info': '资产管理',
'list': ['测试服务器', 'redis服务器', 'memcached服务器', 'nginx服务器'],
}
return render(request, 'assetinfo/index.html', context)
浏览器测试访问如下: