Django模板

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

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

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

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

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

在模板中使用变量

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





Hello


{{ hello }}



模板中的脚本元素

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

if/elif/else/endif

语法:

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

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

for

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

{% for item in iterable %}

{{ item }}

示例:

{% for item in a_list %}

{{ item }}

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

{% for item in ['1','2'] %}

{{ item }}

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

{% for item in iterable reversed %}

ifequal/ifnotequal

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

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

等价于:

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

类似地,有ifnotequal:

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

管道过滤器

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

{{ a_list|first|upper }}

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

include模板

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

模板继承

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



Hello World!


{% block mainbody %}

base


{% endblock %}

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

{% extends "base.html" %}

{% block mainbody %}

extends base

posted @ 2016-03-08 20:54  -Finley-  阅读(341)  评论(0)    收藏  举报