前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django 2.1.7 创建应用模板

Django 2.1.7 创建应用模板

作者头像
Devops海洋的渔夫
发布2019-06-11 16:10:21
7300
发布2019-06-11 16:10:21
举报
文章被收录于专栏:Devops专栏Devops专栏

上一篇中讲诉了关于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)

浏览器测试访问如下:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.06.04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 参考文献
  • 创建模板
  • 定义模板
  • 视图调用模板
  • 自定义调用模板方法
  • 使用Django的render()方法调用模板
相关产品与服务
测试服务
测试服务 WeTest 包括标准兼容测试、专家兼容测试、手游安全测试、远程调试等多款产品,服务于海量腾讯精品游戏,涵盖兼容测试、压力测试、性能测试、安全测试、远程调试等多个方向,立体化安全防护体系,保卫您的信息安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档