Django的页面渲染是通过Django的模板语法在模板中渲染上下文的变量来进行输出的,Django 的模板语言是为了在强大和简单之间取得平衡而设计的。它的设计让习惯于使用 HTML 的人感觉很舒服。如果你接触过其他基于文本的模板语言,如 Smarty 或 Jinja2 ,你应该会对 Django 的模板感到很舒服。
模板是一个文本文件。它可以生成任何基于文本的格式(HTML、XML、CSV 等),模板中包含变量和标签。
一个简单的案例:
{% extends "base_generic.html" %}
{% block title %}{{ section.title }}{% endblock %}
{% block content %}
<h1>{{ section.title }}</h1>
{% for story in story_list %}
<h2>
<a href="{{ story.get_absolute_url }}">
{{ story.headline|upper }}
</a>
</h2>
<p>{{ story.tease|truncatewords:"100" }}</p>
{% endfor %}
{% endblock %}
模板语法:
view:{"HTML变量名" : "views变量名"}
HTML:{{变量名}}
其中变量可以为Python中的各种变量类型,例如:单一的变量,或是集合类的变量如list、dict等。
标签是这样的: {% tag %}。标签比变量更复杂。有的在输出中创建文本,有的通过执行循环或逻辑来控制流程,有的将外部信息加载到模板中,供以后的变量使用。
{% if condition1 %}
... display 1
{% elif condition2 %}
... display 2
{% else %}
... display 3
{% endif %}
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% endfor %}
</ul>
通过使用过滤器修改显示的变量。过滤器是这样的: {{ name|lower }}
。这将显示 lower 过滤器过滤后的 {{ name }}
变量的值,该过滤器将文本转换为小写。使用管道(|)来应用过滤器。
例如:
{{ value|length }}
上边会输出数组的长度。
当然过滤器有很多的,具体可以查看官方的列表:内置过滤器参考
Django 的模板引擎中最强大的——也是最复杂的——部分是模板继承。模板继承允许你建立一个基本的“骨架”模板,它包含了你网站的所有常用元素,并定义了子模板可以覆盖的块。
base.html:
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="style.css">
<title>{% block title %}My amazing site{% endblock %}</title>
</head>
<body>
<div id="sidebar">
{% block sidebar %}
<ul>
<li><a href="/">Home</a></li>
<li><a href="/blog/">Blog</a></li>
</ul>
{% endblock %}
</div>
<div id="content">
{% block content %}{% endblock %}
</div>
</body>
</html>
这个模板,我们称之为 base.html
,它定义了一个 HTML 骨架文档,你可以用它来制作一个两栏式页面。“子”模板的工作是用内容填充空块。
在这个例子中,block
标签定义了三个块,子模板可以填入其中。block
标签所做的就是告诉模板引擎,子模板可以覆盖模板的这些部分。
子模板继承:
{% extends "base.html" %}
{% block title %}My amazing blog{% endblock %}
{% block content %}
{% for entry in blog_entries %}
<h2>{{ entry.title }}</h2>
<p>{{ entry.body }}</p>
{% endfor %}
{% endblock %}
{% extends "base.html" %}
表示继承模板bas.html
。{% block title %}My amazing blog{% endblock %}
就是在改写模板中可以自定义的内容,通过这种继承的方式,可以构建复杂的网页。
Django的模板语法还有很多功能可以使用,熟练这些功能可以大大的提高页面渲染开发的素的。
参考文章: