9. Django 2.1.7 创建应用模板_html

上一篇中讲诉了关于Django 2.1.7 视图的操作,本篇章开始研究模块这块内容。

参考文献

官网文档

创建模板

在 assetinfo 目录里创建一个 templates 目录。Django 将会在这个目录里查找模板文件。在刚刚创建的 templates 目录里,再创建一个目录 assetinfo,然后在其中新建一个文件 index.html 。换句话说,模板文件的路径应该是 polls/templates/polls/index.html 。因为 Django 会寻找到对应的 app_directories ,所以你只需要使用 polls/index.html 就可以引用到这一模板了。

目录结构如下:

9. Django 2.1.7 创建应用模板_java_02

定义模板

编写index.html,写入一个标题,后续通过视图引用。代码如下:

9. Django 2.1.7 创建应用模板_django_03

<!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>

在模板中输出变量语法如下,变量可能是从视图中传递过来的,也可能是在模板中定义的。

{{变量名}}

在模板中编写代码段语法如下:

{%代码段%}

上面的例子在代码段里面写的是for循环的语法。

{%for i in list%}
{{ i }}
{%endfor%}

另外if判断的语法如下:

{% 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文件,调用上面定义的模板文件

9. Django 2.1.7 创建应用模板_java_04

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))

使用浏览器访问测试如下:

9. Django 2.1.7 创建应用模板_js_05

可以看到浏览器都渲染好了传递的数据。从上面的三个步骤操作,的确可以传递数据,但是就会觉得这样重复去写的话,会很麻烦。那么是不是可以将三个步骤抽出来一个方法,然后快速执行呢?

自定义调用模板方法

9. Django 2.1.7 创建应用模板_java_06

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即可。

测试访问正常如下:

9. Django 2.1.7 创建应用模板_python_07

其实Django提供的一个render()方法就是已经实现了这个功能了。

使用Django的render()方法调用模板

9. Django 2.1.7 创建应用模板_js_08

from django.shortcuts import render

def index(request):
context = {
'info': '资产管理',
'list': ['测试服务器', 'redis服务器', 'memcached服务器', 'nginx服务器'],
}

return render(request, 'assetinfo/index.html', context)

浏览器测试访问如下:

9. Django 2.1.7 创建应用模板_js_09