模板标签
内置标签
文件大小
文件大小:{{ file_size|filesizeformat }}
切片
<p>切片:{{ name_list|slice:"1:-1" }}</p> <p>切片:{{ name_dict.name3|slice:"1:-1" }}</p>
时间
<p>时间格式化:{{ now|date:"Y-m-d H:i:s" }}</p>
a标签
<p>a标签:{{ a_html|safe }}</p>
js标签(添加后js不被执行)
<p>script标签:</p> {{ script_html }}
文本裁剪
<p>大段的文本:{{ p_str|truncatechars:20 }}</p>
循环
<p>for循环</p>
<ul>
{% for name in name_list %}
{% if forloop.last %}
<li style="color: red;">{{ forloop.revcounter }}-{{ name }}</li>
{% else %}
<li {% if forloop.first %}style="background-color: yellow;" {% endif %}>{{ forloop.revcounter }}-{{ name }}</li>
{% endif %}
{% endfor %}
</ul>
#双层循环
<p>双层循环</p>
{% for name in name_list2 %}
{% for name1 in name %}
{{ forloop.parentloop.counter }}
{{ forloop.counter }}
{{ name1 }}
{% endfor %}
{% endfor %}
while
<p>with语句</p>
{{ name_list }}
{% with name %}
{{ name }}
{% endwith %}
for in 循环
<ol>
{% for name in name_list %}
<li>{{ name }}</li>
{% endfor %}
</ol>
为空
{% for i in name_list %}
{{ i }}
{% empty %}
空空如也
{% endfor %}
判断
{% if p3 %} <p>p3:{{ p3 }}</p> {% elif p2 %} <p>p2:{{ p2 }}</p> {% else %} <p>什么人都没有!</p> {% endif %} <hr> #判断列表长度 {% if name_list|length >= 3 %} <p>需要打两辆车</p> {% else %} <p>一辆足矣!</p> {% endif %}
{% if a > b %}
{% endif %}
{% if a > b %}
{% else %}
{% endif %}
{% if a > b %}
{% elif %}
{% else %}
{% endif %}
标签注释
{# 注释的内容 #}
长度
{{ name|length }}
默认值
{{ bucunzai|default:"这个变量并没有传值,使用的是默认值" }}
指定索引显示
{{ name_list }} {{ name_list.0 }} {{ name_list.1 }} {{ name_list.2 }}
对象属性
{{ p1 }} {{ p1.name }} {{ p1.age }} {{ p1.run }}
自定义
最多接收两个参数
示例(字体增加背景色)
1.app01下创建包templatetags
2.创建myfilter.py

from django import template register = template.Library() # 告诉Django的模板语言我现在有一个自定义的filter方法,名字叫bl @register.filter(name="bl") def add_bl(arg): return '<span style="color:red;">{}</span>'.format(arg) # 告诉Django的模板语言我现在有一个自定义的filter方法,名字叫addstr @register.filter(name="addstr") def add_str(arg, arg2): """ 第一个参数永远是管道符前面那个变量 :param arg: 道符前面那个变量 :param arg2: 冒号后面的变量 :return: """ return "{} {}.".format(arg, arg2)
3.使用
<p>自定义的filter方法</p> {% load myfilter %} {{ name|bl|safe }} {{ name|bl }}
模板布局
引入
{% include 'left_nav.html' %}
自定义
1.定义文件mysimpletag.py,

from django import template register = template.Library() @register.simple_tag(name="yimi") def my_sum(arg1, arg2, arg3): return "{}-{}-{}".format(arg1, arg2, arg3) @register.inclusion_tag('test/results.html') def show_results(n): n = 1 if n < 1 else int(n) data = ["第{}项".format(i) for i in range(1, n+1)] return {"results": data}
2渲染内容到result模板并引入

引入 {% load mysimpletag %} 使用 {% yimi 'wangzhen' 'changjiang' 'buyaolian' %} 引入 {% show_results 10 %} <hr> {% show_results 5 %} <hr> {% show_results 100 %} results.html <ul> {% for choice in results %} <li>{{ choice }}</li> {% endfor %} </ul>
模板嵌套
1.创建base.html
把对需要改动的内容,放入 {% block page-css %} {% endblock %}
2.继承引入
{% extends "base.html" %} {% block book_class %} active {% endblock %}
引入静态文件

方式一 {% load static %} <img src="{% static 'hmbb.png' as xiaomao %}" alt=""> <img src="{{ xiaomao }}" alt=""> <img src="{{ xiaomao }}" alt=""> <img src="{{ xiaomao }}" alt=""> <img src="{{ xiaomao }}" alt=""> 方式二 <img src="{% get_static_prefix %}hmbb.png" > 方式三 <img src="{% static 'hmbb.png' %}" >
其他
1. 模板系统(字符串替换) 1. 语法 1. 变量相关: {{ name }},{{name|length}},{{name|default:"默认值"}} 2. 逻辑相关: 1. if判断 {% if a > b %} {% endif %} {% if a > b %} {% else %} {% endif %} {% if a > b %} {% elif %} {% else %} {% endif %} 2. for循环 1. for循环的基本用法: {% for i in name_list %} {{ i }} {% endfor %} {% for i in name_list %} {{ i }} {% empty %} 空空如也 {% endfor %} 2. for循环可用的属性: forloop.counter forloop.counter0 forloop.revcounter forloop.revcounter0 forloop.first forloop.last forloop.parentloop --> 两层for循环,内层循环引用外层循环 2. filter 1. 常用的内置filter 1. length 2. filesizeformat --> 格式化文件大小的 3. date:'Y-m-d H:i:s' --> 格式化时间的 4. slice 5. safe --> XSS攻击(跨站脚本攻击) 6. truncatechars:20 --> 截取字符,超过的用...表示 7. default 2. 自定义的filter 示例: 1. addsb 2. addstr 具体的实现方式: 1. 定义阶段 1. 在app下面新建一个python的包:templatetags 2. 在上面的Python包中新建一个Python文件,名字随意 3. 在上述python文件中: from django import template # 生成一个注册用的实例 register = template.Library() # 定义并注册一个自定义的filter函数 @register.filter(name='addsb') def add_sb(arg): return "{} sb".format(arg) 2. 调用阶段: 1. 在Django的模板文件中,导入刚才新建的python文件 {% load py文件名 %} 2. 按照filter的语法调用 {{ name|addsb }}