Django 笔记之 Template 模板

Django 的模板语言

模板语法

模板 是和 上下文 一起呈现的。
有四种语法结构。

Variables 变量

变量是 context 里的键 {{ key }}
关联属性查找用.
字典查找 {{ key.key }}
属性查找 {{ keyattr }}
index 查找{{ key.0 }}

如果变量是可调用的,模板系统会自己调用它并用返回值替换。

Tags 标签

标签在渲染过程中提供任意逻辑。{% and %}

可以是个函数
{% csrf_token %}

tags 可以接受参数
{% cycle 'odd' 'even' %}

有的需要开始和结束tags
{% if user.is_authenticated %}Hello, {{ user.username }}.{% endif %}

Filters 过滤器

过滤器转换变量和标记参数的值。{{ django|title}}
这个会把 {‘django’: ‘the web framework for perfectionists with deadlines’} 首字符大写;

有的需要参数
{{ my_date|date:"Y-m-d" }}

Comments

{# this won’t be rendered #}
{% comment %}

内置 tags 和 filters

内置 24 个 tag

tag参数用途例子备注
autoescapeon/off去除 html 标签{% autoescape on %}{{ body }}{% endautoescape %}
block子模板重写
comment评论
csrf_tokenCSRF protection
cycle备选变量循环使用备选变量的内容{% for o in some_list %}<tr class="{% cycle 'row1' 'row2' as rowcolors %}"></tr>{% endfor %}as 重命名
debug调试信息
extends父模板名重用模板{% extends "./base2.html" %}相对.路径
filter过滤器名过滤{% filter force_escape|lower %}This text will be HTML-escaped, and will appear in all lowercase.{% endfilter %}
firstofvar1 var2 var3返回第一个True变量{% firstof var1 var2|safe var3 "<strong>fallback value</strong>"|safe %}全假返回最后的字符串
for循环列表,字典{% for obj in list reversed %} 逆序
if条件语句if elif else endif支撑 and or not 以及 == <> is in 等比较运算符
ifchanged是否改变{% for date in days %}{% ifchanged date.date %} {{ date.date }} {% endifchanged %}{% endfor %}只能用在 for 循环里
include模板名嵌套模板{% include "name_snippet.html" with person="Jane" greeting="Hello" %}参数不全可用 only
loadtagset加载标签集{% load somelibrary package.otherlibrary %}{% load foo bar from somelibrary %} 指定 tag
loremcount method random随机文字填充{% lorem 2 w random %}w words p paragraphs b text
now格式当前时间{% now "Y" as current_year %}
regroup分组分组可过滤器排序
resetcycle重置 cycle与cycle共用
spaceless移除 html 空格end
templatetagopenblock closeblock openvariable closevariable openbrace closebrace opencomment closecomment转义{% templatetag openblock %} url 'entry_list' {% templatetag closeblock %}
url反推url{% url 'some-url-name' v1 v2 %}{% url 'some-url-name' arg1=v1 arg2=v2 %} 避免硬编码 as 重命名
verbatim取消模板功能用原始字符串
widthratio按比计算宽度{% widthratio this_value max_value max_width %}
with保存复杂计算结果重用{% with business.employees.count as total %}{{ total }} employee{{ total|pluralize }}{% endwith %}{% with alpha=1 beta=2 %}

如果列表为空使用 for…empty

<ul>{% for athlete in athlete_list %}
    <li>{{ athlete.name }}</li>{% empty %}
    <li>Sorry, no athletes in this list.</li>
    {% endfor %}
</ul>

forloop.counter 计数器 从1开始
forloop.counter0 计数器 从0开始
forloop.first True 首次
forloop.last


regroup 很强大,可以把字典列表重分组显示

cities = [
    {'name': 'Mumbai', 'population': '19,000,000', 'country': 'India'},
    {'name': 'Calcutta', 'population': '15,000,000', 'country': 'India'},
    {'name': 'New York', 'population': '20,000,000', 'country': 'USA'},
    {'name': 'Chicago', 'population': '7,000,000', 'country': 'USA'},
    {'name': 'Tokyo', 'population': '33,000,000', 'country': 'Japan'},]
    

用例

{% regroup cities by country as country_list %}

<ul>{% for country in country_list %}
    <li>{{ country.grouper }}
    <ul>
        {% for city in country.list %}
          <li>{{ city.name }}: {{ city.population }}</li>
        {% endfor %}
    </ul>
    </li>{% endfor %}</ul>

内置 filter 过滤器

filter参数用途例子fromto
addstr list加法 连列表{{ value|add:"2" }}
addslashesI’mI\'m
capfirstdjangoDjango
center长度中心对齐{{ value|center:"15" }}
cutstr删除字符{{ value|cut:" " }}
date日期格式{{ value|date:"D d M Y" }} {{ value|time:"H:i" }}
defaultFalse 替换{{ value|default:"nothing" }}
default_if_noneNone 替换
dictsortkey字典列表按key排序 元组列表按位置排序{{ value|dictsort:"name" }} {{ value|dictsort:0 }}
dictsortreversed逆序同上
divisibleby能否被整除{{ value|divisibleby:"3" }}21True
escape转义<&lt
escapejs
filesizeformat文件大小友好格式123456789117.7MB
first首元素
floatformat精度默认1浮点数格式化
force_escape强制转义
get_digit默认1返回右数第n位{{ value|get_digit:"2" }}12343
iriencode?test=1&me=2?test=1&me=2
join连字符{{ value|join:" // " }}[‘a’,'b,‘c’]‘a//b//c’
json_script字典转 json{{ value|json_script:"hello-data" }}{‘hello’: ‘world’}<script id="hello-data" type="application/json">{"hello": "world"}</script>
last尾元
length长度
length_is长度断言
linebreaks换行转<br>Joel\nis a slug<p>Joel<br>is a slug</p>
linebreaksbr换行转<br>Joel\nis a slugJoel<br>is a slug
linenumbers加行号one1.one
ljust长度左对齐 空格补{{ value|ljust:"10" }}
lower小写
make_list转列表‘abc’ 123[‘a’,‘b’,‘c’] [‘1’,‘2’,‘3’]
pluralize复数后缀s
pprintdebug
random列表随机选
rjust
safe无需转义
safeseq序列无需转义{{ some_list|safeseq|join:", " }}
slice同切片{{ some_list|slice:":2" }}
slugifyJoel is a slugjoel-is-a-slug
striptags去掉所有html标签
time
timesince时间间隔{{ blog_date|timesince:comment_date }}
timeuntil所剩余时间{{ conference_date|timeuntil:from_date }}
title标题化my FIRST postMy First Post
truncatechars按字符截断长度{{ value|truncatechars:7 }}
truncatewords按单词截断长度{{ value|truncatewords:7 }}
truncatewords_html截断保留最后的 html 标签
unordered_list将内嵌的列表转成无序列表格式
upper大写
urlencodeurl转码
urlize把url转换成可点击的www.django.com<a href="http://www.django.com" rel="nofollow">www.djangoproject.com</a>
wordcount单词计数
wordwrapN单词打包 每行N个
yesnoTrue False None 转换{{ value|yesno:"yeah,no,maybe" }}Trueyeah

使用 filter 的好处是不用自己在视图里计算出结果再传递给 context

其他 tags 和 filter

django.contrib.humanize

{% load static %}
<img src="{% static "images/hi.jpg" %}" alt="Hi!">

使用 STATIC_URL
{% get_static_prefix as STATIC_PREFIX %}
<img src="{{ STATIC_PREFIX }}images/hi.jpg" alt="Hi!">

使用 MEDIA_URL
<body data-media-url="{% get_media_prefix %}">

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值