能够将 HTML、代码/变量分别分离为视图和 HTML 模板。将两者联系起来,取决于渲染函数和模板语言。
渲染函数
这个函数有三个参数 –
请求 – 初始化请求
模板路径 – 这是相对于项目 .py 文件中选项的变量的路径。
参数字典 – 字典包含模板中所需的所有变量。该变量可以由视图中声明的所有局部变量创建或使用()。
模板语言 (DTL)
模板引擎提供了一种小语言来定义应用程序的面向用户的层。
显示变量
变量显示如下:{{}}。在 () 函数的第三个参数中,模板被视图发送的变量替换。让我们更改 hello.html 以显示今天的日期:
你好.html
Hello World!!!Today is {{today}}
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]
您可能已经注意到,如果变量不是字符串,则使用方法来显示它;并且根据相同的原则,您可以访问对象的属性,就像在 . 例如:如果我们要显示日期的年份,这里的变量是:{{today.year}}。
筛选
它们帮助您显示修改后的变量。过滤器的结构如下:{{var|}}。
一个简单的例子 –
{{|:80}} – 过滤器将截断字符串,因此只能看到前 80 个字符。
{{|lower}} – 将字符转换为小写
{{||}} – 转义字符串内容,然后将其包装成标签。
您还可以设置默认变量。
标签
标签可以执行以下操作:if 条件、for 循环、模板继承等。
如果标记
就像 in 一样,您可以在模板中使用 if、else 和 elif –
Hello World!!!Today is {{today}}
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%}
1234567891011121314151617181920复制代码类型:[html]
在这个新模板中,基于今天的日期,模板将呈现这个值。
用于标签
就像 ‘if’ 一样,我们有 ‘for’ 标签,这些标签的使用方式与 . 让我们更改 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}}-
Hello World!!!Today is {{today}}
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%}
{% for day in days_of_week %}
{{day}}
{% endfor %}
12345678910111213141516171819202122232425复制代码类型:[html]
我们应该得到如下输出 –
Hello World!!!
Today is Sept. 11, 2015
We are I don't know.
Mon
Tue
Wed
Thu
Fri
Sat
Sun12345678910复制代码类型:[html]
块和扩展标签
模板系统是不完整的模板继承。当您设计模板的含义时html条件注释判断,子模板会根据自己的需要填写一个主模板,就像页面上的选定标签可能需要特殊的 CSS 一样。
让我们修改 hello.html 模板以从 .html 继承。
.html
{% block title %}Page Title{% endblock %}
{% block content %}
Body content
{% endblock %}
123456789101112131415复制代码类型:[html]
你好.html
{% extends "main_template.html" %}
{% block title %}My Hello Page{% endblock %}
{% block content %}
Hello World!!!Today is {{today}}
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%}
{% for day in days_of_week %}
{{day}}
{% endfor %}
{% endblock %}
1234567891011121314151617181920212223242526复制代码类型:[html]
在上面的例子中,当调用 /myapp/hello 时,我们仍然会得到和以前一样的结果,但是现在我们是在扩展而不是重构代码。
在 .html 中,我们使用标签块定义。标题块块将包含页面标题,内容块将是页面的主要内容。在 Home.html 中使用扩展继承自 .htmlhtml条件注释判断,然后我们使用上面的块定义(内容和标题)。
注释标签
注释标签用于模板定义注释,而不是 HTML 注释,它们不会出现在 HTML 页面中。它可以是一个文件,也可以只是注释一行代码。
公开课广场——人才学习交流平台
文章来源:http://www.toutiao.com/a6994720403742589472/