模板语法
{{ }} 变量相关
{%%} 逻辑相关
ps: 前端获取后端传过来的容器类型的内部元素 统一采用句点符(.)
过滤器: |
default
- {{ value|default:"nothing"}}
length
- {{ value|length }}
filesizeformat
- {{ value|filesizeformat }}
slice
- {{value|slice:"2:-1"}}
date
- {{ value|date:"Y-m-d H:i:s"}}
safe
{{ value|safe}}
前后端取消转义:
前端:
|safe
后端:
from django.utils.safestring import mark_safe
zzz = mark_safe('阿萨德搜啊第三款垃圾袋
')truncatechars
{{ value|truncatechars:9}}
truncatewords
- {{ value|truncatewords:9}}
cut
{{ value|cut:' ' }}
- 移除value中所有的与给出的变量相同的字符串
join
标签: {% %}
for循环
{% for foo in d.keys %}
<p>{{ foo }}</p>
{% endfor %}
{% for foo in d.values %}
<p>{{ foo }}</p>
{% endfor %}
{% for foo in d.items %}
<p>{{ foo }}</p>
{% endfor %}
for循环可用的一些参数:
forloop.counter | 当前循环的索引值(从1开始) |
forloop.counter0 | 当前循环的索引值(从0开始) |
forloop.revcounter | 当前循环的倒序索引值(从1开始) |
forloop.revcounter0 | 当前循环的倒序索引值(从0开始) |
forloop.first | 当前循环是不是第一次循环(布尔值) |
forloop.last | 当前循环是不是最后一次循环(布尔值) |
forloop.parentloop | 本层循环的外层循环 |
for ... empty
<ul>
{% for user in user_list %}
<li>{{ user.name }}</li>
{% empty %}
<li>空空如也</li>
{% endfor %}
</ul>
if判断
if,elif和else
{% if user_list %}
用户人数:{{ user_list|length }}
{% elif black_list %}
黑名单数:{{ black_list|length }}
{% else %}
没有用户
{% endif %}
当然也可以只有if和else
{% if user_list|length > 5 %}
七座豪华SUV
{% else %}
黄包车
{% endif %}
ps: if语句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断。
with取别名
可以给一个比较复杂的取值操作取一个别名 之后在with语句中 就可以使用该别名
{% with l.6.3.name as ttt %}
{{ ttt }}
{{ l.6.3.name }}
{% endwith %}
csrf_token
这个标签用于跨站请求伪造保护。
在页面的form表单里面写上 {% csrf_token %}
自定义过滤器
在app位置创建一个 templatetags文件加 里面放相关的逻辑py文件
from django import template
register=template.Library ()
@register.filter(name="nash") # 自定义过滤器只是带有一个或两个参数的Python函数
@register.filter(name="nash")
def index(a,b):
print('下午刚起床 一脸懵逼')
return a + b
使用自定义过滤器
先导入 格式为 {{ 操作对象(作为第一个参数传入)|名字(可写==> :另一个参数) }}
{# 先导入我们自定义filter那个文件 #}
{% load app01_filters %}
{# 使用我们自定义的filter,这边对于的是取的名字 #}
{{ "hello"|nash:"world" }}
自定义标签
from django import template
register = template.Library ()
@register.simple_tag(name="nash") # 标签函数可以可传多参数
@register.simple_tag(name='apan')
def xxx(a,b,c,year):
return '%s?%s|%s{%s'%(a,b,c,year)
使用自定义标签
先导入 格式为 {% 名字 空格隔开的参数 %}
{# 先导入我们自定义simple_tag那个文件 #}
{% load app01_simple_tag %}
{# 使用我们自定义的simple_tag #}
{% apan "9 "22 "11:41" "2019" %}
inclusion_tag
多用于返回html代码片段
register = template.Libary ()
@register.inclusion_tag(模版名,name=名字)
使用inclusion_tag
先导入 {% load 名字 %} 格式 {% 函数名 参数 %}
模板的继承与导入
我们通常会在母板中定义页面专用的CSS块和JS块,方便子页面替换。
母版
{% block 给区域起的名字 %}
{% endblock %}
通常情况下一个模板中应该至少有三块
{% block css %}
页面css代码块
{% endblock %}
{% block js %}
页面js代码块
{% endblock %}
{% block content %}
页面主体内容
{% endblock %}
子板继承模板
先继承模板所有的内容
{% extends 'home.html' %}
然后根据block块的名字修改指定区域的内容
{% block content %}
<h1>登录页面</h1>
<form action="">
<p>username:<input type="text" class="form-control"></p>
<p>password:<input type="text" class="form-control"></p>
<input type="submit" class="btn btn-success">
</form>
{% endblock %}
块(block)
通过在母板中使用{% block xxx %}
来定义"块"。
在子页面中通过定义母板中的block名来对应替换母板中相应的内容。
{% block page-main %}
<p>世情薄</p>
<p>人情恶</p>
<p>雨送黄昏花易落</p>
{% endblock %}
组件(模版的导入, 一般都用 inclusion_tag 来代替)
可以将常用的页面内容如导航条,页尾信息等组件保存在单独的文件中,然后在需要使用的地方按如下语法导入即可。
{% include 'navbar.html' %}
静态文件配置
{% static %}
{% load static %}
<img src="{% static "images/hi.jpg" %}" alt="Hi!" />
引用JS文件时使用:
{% load static %}
<script src="{% static "mytest.js" %}"></script>