Django 笔记之 Template 模板

Django 的模板语言

文章目录

  • Django 的模板语言
    • 模板语法
      • Variables 变量
      • Tags 标签
      • Filters 过滤器
      • Comments
    • 内置 tags 和 filters
      • 内置 24 个 tag
      • 内置 filter 过滤器
      • 其他 tags 和 filter

模板语法

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

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

{% endfor %}
tag 参数 用途 例子 备注
autoescape on/off 去除 html 标签 {% autoescape on %}{{ body }}{% endautoescape %}
block 子模板重写
comment 评论
csrf_token CSRF protection
cycle 备选变量 循环使用备选变量的内容 {% for o in some_list %}
as 重命名
debug 调试信息
extends 父模板名 重用模板 {% extends "./base2.html" %} 相对.路径
filter 过滤器名 过滤 {% filter force_escape|lower %}This text will be HTML-escaped, and will appear in all lowercase.{% endfilter %}
firstof var1 var2 var3 返回第一个True变量 {% firstof var1 var2|safe var3 "fallback value"|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
load tagset 加载标签集 {% load somelibrary package.otherlibrary %} {% load foo bar from somelibrary %} 指定 tag
lorem count 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
templatetag openblock 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 参数 用途 例子 from to
add str list 加法 连列表 {{ value|add:"2" }}
addslashes I’m I\'m
capfirst django Django
center 长度 中心对齐 {{ value|center:"15" }}
cut str 删除字符 {{ value|cut:" " }}
date 日期格式 {{ value|date:"D d M Y" }} {{ value|time:"H:i" }}
default False 替换 {{ value|default:"nothing" }}
default_if_none None 替换
dictsort key 字典列表按key排序 元组列表按位置排序 {{ value|dictsort:"name" }} {{ value|dictsort:0 }}
dictsortreversed 逆序同上
divisibleby 能否被整除 {{ value|divisibleby:"3" }} 21 True
escape 转义 < <
escapejs
filesizeformat 文件大小友好格式 123456789 117.7MB
first 首元素
floatformat 精度默认1 浮点数格式化
force_escape 强制转义
get_digit 默认1 返回右数第n位 {{ value|get_digit:"2" }} 1234 3
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’}
last 尾元
length 长度
length_is 长度断言
linebreaks 换行转
Joel\nis a slug

Joel
is a slug

linebreaksbr 换行转
Joel\nis a slug Joel
is a slug
linenumbers 加行号 one 1.one
ljust 长度 左对齐 空格补 {{ value|ljust:"10" }}
lower 小写
make_list 转列表 ‘abc’ 123 [‘a’,‘b’,‘c’] [‘1’,‘2’,‘3’]
pluralize 复数后缀s
pprint debug
random 列表随机选
rjust
safe 无需转义
safeseq 序列无需转义 {{ some_list|safeseq|join:", " }}
slice 同切片 {{ some_list|slice:":2" }}
slugify Joel is a slug joel-is-a-slug
striptags 去掉所有html标签
time
timesince 时间间隔 {{ blog_date|timesince:comment_date }}
timeuntil 所剩余时间 {{ conference_date|timeuntil:from_date }}
title 标题化 my FIRST post My First Post
truncatechars 按字符截断长度 {{ value|truncatechars:7 }}
truncatewords 按单词截断长度 {{ value|truncatewords:7 }}
truncatewords_html 截断保留最后的 html 标签
unordered_list 将内嵌的列表转成无序列表格式
upper 大写
urlencode url转码
urlize 把url转换成可点击的 www.django.com www.djangoproject.com
wordcount 单词计数
wordwrap N 单词打包 每行N个
yesno True False None 转换 {{ value|yesno:"yeah,no,maybe" }} True yeah

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

其他 tags 和 filter

django.contrib.humanize

{% load static %}
Hi!

使用 STATIC_URL
{% get_static_prefix as STATIC_PREFIX %}
Hi!

使用 MEDIA_URL

你可能感兴趣的:(Django笔记)