Django 2.1.7 创建应用模板

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

参考文献

官网文档

创建模板

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

目录结构如下:

定义模板

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

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

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

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

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

自定义调用模板方法

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()方法调用模板

from django.shortcuts import render

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

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

浏览器测试访问如下: