Django模板

Django模板是MVC架构中的视图层(view),模板文件通常保存在ProjectDir下的templates目录下,以.html的格式存储。

模板视图函数作为控制器,将用户请求被处理后映射到相应视图并返回HttpResponse。

模板文件可以直接书写html代码以及脚本代码块,模板渲染引擎会将脚本渲染为html元素。

模板中除了html注释<!-- -->外,还有模板注释{# #}.html注释将会随HttpResponse返回客户端,而模板注释不会包含在HttpResponse中.

在views函数中调用render(request, template_name, context)函数渲染模板, 其中context为指定模板上下文的字典.

在模板中使用变量

在模板使用双花括号"{{ }}"使用变量,变量将从context中取出并转换为字符串替换变量元素。如:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello</title>
</head>
<body>
    <p>{{ hello }}</p>
</body>
</html>

模板中的脚本元素

模板中的脚本元素有3种:

if/elif/else/endif

语法:

{% if condition1 %}
   display 1
{% elif condiiton2 %}
   display 2
{% else %}
   display 3
{% endif %}

根据条件来判断显示的内容,可以使用and,or和not运算符,变量将从上下文中寻找。

for

for允许迭代某一对象,模板引擎将会渲染其中的内容

{% for item in iterable %}
	<p>{{ item }}</p>
 {% endfor %}

示例:

   {% for item in a_list %}
        <p>{{ item }}</p>
    {% endfor %}

a_list必须从context中搜索,模板引擎不支持定义iterable。下列示例将产生语法错误:

  {% for item in ['1','2'] %}
        <p>{{ item }}</p>
    {% endfor %}

支持reversed关键字和嵌套使用:

{% for item in iterable reversed %}

ifequal/ifnotequal

类似{%if%}标签,但可方便的进行比较:

{% ifequal obj1 obj2 %}
   display 1
{% else %}
   display 3
{% endifequal %}

等价于:

{% if obj1 == obj2 %}
   display 1
{% else %}
   display 2
{% endif %}

类似地,有ifnotequal:

{% ifnotequal obj1 obj2 %}
   display 1
{% else %}
   display 2
{% endifnotequal %}

管道过滤器

管道过滤器将上一个输出作为下一个过滤器的输入,通常最初的输出流是一个上下文中的对象:

{{ a_list|first|upper }}

上述示例中first过滤器首先取出a_list的首元素,然后由upper过滤器将其转化为大写。

include模板

{% include 'included.html' %}标签允许在模板中包含其它的模板的内容。

模板继承

模板可以通过继承来实现复用。首先编写base.html

<html>
  <head>
    <title>Hello World!</title>
  </head>

  <body>
    {% block mainbody %}
       <p>base</p>
    {% endblock %}
  </body>
</html>

{% block %}标签通知模板引擎,子模板可以重写这些部分。

{% extends "base.html" %}

{% block mainbody %}
	<p>extends base</p>
{% endblock %}
posted @ 2016-03-08 20:54  -Finley-  阅读(313)  评论(0编辑  收藏  举报