用 template 渲染 Context
标准用法from django.template import Context, Template t = Template('My name is {{ name }}.') c = Context({'name': 'Stephane'}) t.render(c)
Template 能以文本或 html 文件为参数创建
Context 以 python dict 为参数创建
简单用法
from django.shortcuts import render_to_response render_to_response('search_results.html', {'books': books, 'query': q})
Context
Context 是类字典变量,这意味着你可以使用 Python 字典的成员函数注释
{# This is a comment #}{% block foo %}, {% endblock %}
template 有继承关系,在父子模板中同时使用如上的tag则字模板的内容替代父模板的内容
也可以只是添加而不替代
使用 block.super
比如添加html tag 的 class
{% block head-class %}{{ block.super }} float-left {% endblock %}
变量 {{ foo }}, {{ foo.bar }}
变量由 context 传入,context 是一个类字典数据,比如 {'name': 'Stephane'}则在模板中,{{ name }} 变量替换为 'Stephane'
变量不要求为str,可以是任何 python 数据,数字,list, boolean, 对象都可以,只要它们可以转化为 str
假如 name 是一个对象,{{ name }} 只会打印出类似于如下的信息
<books.views.SomeClass instance at 0x013DB120>
假如 name 是一个 list,我们需要引用它的第一个成员
诸如此类情况,我们需要用变量做一些操作,此时需要使用句点查找规则,它在模板中格式为 {{ foo.bar }}
句点查找规则可概括为: 当模板系统在变量名中遇到点时,按照以下顺序尝试进行查找:
- 字典类型查找 (比如 foo["bar"] )
- 属性查找 (比如 foo.bar )
- 方法调用 (比如 foo.bar() )
- 列表类型索引查找 (比如 foo[bar] ),bar 为整数,且不支持负数
使用最先找到的方式。
标签 {% %}
{% if today_is_weekend %}...
{% else %}
...
{% endif %}
{% for athlete in athlete_list %}
...
{% endfor %}
{% if athlete_list %}
{% for athlete in athlete_list %}
...
{% endfor %}
{% else %}
There are no athletes. Only computer programmers.
{% endif %}
等同于
{% for athlete in athlete_list %}
...
{% empty %}
There are no athletes. Only computer programmers.
{% endfor %}
Django不支持退出循环操作。 如果我们想退出循环,可以改变正在迭代的变量,让其仅仅包含需要迭代的项目。 同理,Django也不支持continue语句,我们无法让当前迭代操作跳回到循环头部
{% ifequal user currentuser %}
Welcome!
{% endifequal %}
filter: 改变变量 {{ value|filter:parameter }}
如果你对变量要做一些修改,比如使首字母大写,别忘了使用过滤器 {{ value|capfirst }}完整标签和过滤器列表
0 comments:
Post a Comment