前端教程:Django模板系统

Django能够单独分开Python和HTML,Python代码/变量进入视图和HTML模板。 连接这两个,Django依赖于渲染函数和Django模板语言。

渲染函数

这个函数有三个参数 −

请求−初始化请求

模板路径 − 这是相对于在项目settings.py文件的变量到TEMPLATE_DIRS选项的路径。

参数字典 − 字典包含所需的模板中的所有变量。这个变量可以创建或者可以使用 locals() 通过在视图中声明的所有局部变量。

Django模板语言(DTL)

Django模板引擎提供了一个小型的语言来定义应用程序面向用户的层。

显示变量

变量显示如下:{{variable}}. 模板由视图在渲染(render)函数的第三个参数发送的变量来替换变量。让我们改变hello.html显示当天的日期:

hello.html

<html>
   <body>
   Hello World!!!<p>Today is {{today}}</p>
   </body>   </html>1234567复制代码类型:[html]

然后,我们的视图将改变为-

def hello(request):
   today = datetime.datetime.now().date()
   return render(request, "hello.html", {"today" : today})12345复制代码类型:[html]

现在,我们将得到下面的输出在访问URL /myapp/hello 之后−

Hello World!!!
Today is Sept. 11, 2015 12复制代码类型:[html]

正如你可能已经注意到,如果变量不是一个字符串,Django会使用__str__方法来显示它;并以同样的原则,你可以访问对象的属性,就像在Python中使用的一样。例如:如果我们想显示日期的年份,这里的变量是: {{today.year}}.

过滤器

它们可以帮助您显示修改的变量。过滤器的结构如下所示: {{var|filters}}.

一个简单的实例 −

{{string|truncatewords:80}} − 过滤器将截断字符串,所以只看到前80个字符。

{{string|lower}} −转换字符为小写

{{string|escape|linebreaks}} − 转义字符串内容,然后换行转换为标签。

还可以设置默认的变量。

标签

标签可以执行以下操作:if条件,for循环,模板继承以及更多。

if标签

就像在Python中,你可以使用if,else和elif在模板中 −

<html>
   <body>

   Hello World!!!<p>Today is {{today}}</p>
   We are
   {% if today.day == 1 %}

   the first day of month.
   {% elif today == 30 %}

   the last day of month.
   {% else %}

   I don't know.
   {%endif%}
   </body></html>1234567891011121314151617181920复制代码类型:[html]

在这个新的模板,根据当天的日期,该模板将呈现这个值。

for标签

就像'if',我们有 'for' 标签,这些完全像在Python中一样使用它们。让我们改变 hello视图列表发送到我们的模板 −

def hello(request):
   today = datetime.datetime.now().date()

   daysOfWeek = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
   return render(request, "hello.html", {"today" : today, "days_of_week" : daysOfWeek})1234567复制代码类型:[html]

该模板用来显示列表 {{for}}−

<html>
   <body>

   Hello World!!!<p>Today is {{today}}</p>
   We are
   {% if today.day == 1 %}

   the first day of month.
   {% elif today == 30 %}

   the last day of month.
   {% else %}

   I don't know.
   {%endif%}
   <p>
   {% for day in days_of_week %}
   {{day}}   </p>

   {% endfor %}
   </body></html>12345678910111213141516171819202122232425复制代码类型:[html]

我们应该得到输出的内容如下 −

Hello World!!!
Today is Sept. 11, 2015
We are I don't know.
Mon
Tue
Wed
Thu
Fri
Sat
Sun12345678910复制代码类型:[html]

块和扩展标签

模板系统是不完整模板继承。当您设计模板的含义,子模板会根据自己的需要填写一个主模板,就像一个页面中所选选项卡可能需要一个特殊的CSS。

让我们修改 hello.html 模板来从main_template.html继承。

main_template.html

<html>
   <head>
   <title>
   {% block title %}Page Title{% endblock %}   </title>
   </head>

   <body>
   {% block content %}
   Body content
   {% endblock %}
   </body></html>123456789101112131415复制代码类型:[html]

hello.html

{% extends "main_template.html" %}
{% block title %}My Hello Page{% endblock %}
{% block content %}

Hello World!!!<p>Today is {{today}}</p>We are
{% if today.day == 1 %}

the first day of month.
{% elif today == 30 %}

the last day of month.
{% else %}

I don't know.
{%endif%}<p>
   {% for day in days_of_week %}
   {{day}}</p>{% endfor %}
{% endblock %}1234567891011121314151617181920212223242526复制代码类型:[html]

在上面的示例, 在调用/myapp/hello,我们仍然会得到相同的结果和以前一样,但现在我们靠的是扩展,并不用重构代码。

在main_template.html我们定义使用标签块。标题栏块将包含页面标题,以及内容块将在页面主内容。在Home.html中使用扩展继承来自main_template.html,那么我们使用上面块定义(内容和标题)。

注释标签

注释标签用来模板定义注释,不是HTML注释,它们将不会出现在HTML页面。它可以是一个文件或只是注释一行代码。

(0)

相关推荐

  • 前端教程:Django创建视图

    视图功能,或简称"view",是一个简单的Python函数,它接受一个Web请求,并返回一个Web响应.此响应可以是Web页的HTML内容,或重定向,或404错误,或XML文档,或 ...

  • 前端教程:Django模型

    创建模型 下面是创建一个 Dreamreal 模型实例 − from django.db import models class Dreamreal(models.Model): website = ...

  • 前端教程:Django通用视图

    在某些情况下编写视图代码,正如我们所看到前面工作真的很繁重.想象一下,只需要一个静态页面或列表页. Django还提供了一种简单的方法来设置这些简单的视图被称为通用视图. 不同于传统的视图,一般的视图 ...

  • 前端教程:Django上传文件

    对于Web应用程序,以便能够上传文件(资料图片,歌曲,PDF格式,文字......),它通常是很有用的.让我们在这一节中来讨论如何使用Django上传文件. 上传图片 在开始开发图片上传之前,请确保P ...

  • Windows10系统下如何隐藏一个磁盘盘符【图文教程】-系统城

    一位用户反馈自己电脑中有一些不希望被访客看见的文件.照片及视频,因此就希望将它隐藏在一个只有自己知道的地方,这该如何实现呢?今天,系统城小编就要为大家分享Windows10系统下隐藏一个磁盘盘符的方法 ...

  • 修改电脑开机启动项教程,删除系统开机自动启动的程序软件服务

    修改电脑开机启动项教程,删除系统开机自动启动的程序软件服务

  • 干货教程:Linux 系统的备份怎么恢复

    tar 命令 副本(本机备份整个系统,以后还原还是还原到本机) 注意根目录下要有充足的可用空间用于备份. cd /#tar.gz格式tar cvpzf system_backup.tar.gz / - ...

  • win10系统怎样拦截各种软件的广告弹窗【图文教程】-系统城

    一位windows10系统用户反馈自己的电脑在刚开机的时候,总会弹出各种广告弹窗,感觉非常烦人.这该怎么办呢?我们能不能把这些广告弹窗给拦截了呢?答案是肯定的.接下来,小编就教大家win10系统怎样设 ...

  • 前端教程——JavaScript函数中重构If/Else语句的方法

    无论使用何种编程语言,代码都需要根据不同的情况对给定的输入做出不同的决定并执行相应的操作.举例来说,在游戏中,如果玩家的生命值是0,游戏就结束了.在气象应用程序中,如果观看早晨的日出,就会看到一张照片 ...