Django模板
一、常用语法
{{ }} 变量
{% %}逻辑相关
二、模板语言filter操作
1、{{ value|default:'nothing'}} 若没有值传入,则显示nothing
注:TEMPLATES的OPTIONS可以增加一个选项:string_if_invalid:'找不到',可以替代default的的作用。
2、filesizeformat
将值格式化为一个 “人类可读的” 文件尺寸 (例如 '13 KB', '4.1 MB', '102 bytes', 等等)。例如:{{ value|filesizeformat}}
3、date日期格式化
{{value|date:''H-m-d H:i:s''}}
4、自定义filter
(1)首先在app01下创建templatetags文件包
(2)随意定义一个py文件,内容如下
from django import template register=template.Library() @register.filter() def add_1(value): return value+'tianjia' @register.filter(name='add') def add_2(value): return value+'tianjia'
(3)在html界面加载py文件名
{% load 文件名%}
(4)重启Django项目
5、https://www.cnblogs.com/maple-shaw/articles/9333821.html参考链接
三、csrf_token
这个标签用于跨站请求伪造保护。
在页面的form表单里面写上{% csrf_token %}
四、母版
我们将html大量重复的代码创作成模板,将灵活代替的位置利用块来代替
注意:我们通常会在母板中定义页面专用的CSS块和JS块,方便子页面替换。
母版继承{{% extends " muban.html" %}}
块继承{% block 块名 %}填充内容{% endblock %}
五、组件
1、写一段代码 nav.html
2、{% include 'nav.html' %} 固定的组件,重复调用可节省代码
六、静态文件相关
1.{% load static %} --->获取的是setting中的STATIC_URL的/static/相对路径和相对路径拼接
2.{% get_static_prefix %}--->获取的是setting中的STATIC_URL的/static/
举例如下
{% load static %} 第一种方式 <link href="{% static 'bootstrap-3.3.7/css/bootstrap.css' %}" rel="stylesheet"> <link href="{% static 'Dashboard Template for Bootstrap_files/dashboard.css' %}" rel="stylesheet"> <link rel="stylesheet" href="{% static 'font-awesome-4.7.0/css/font-awesome.css' %}"> 第二种方式 <link href="{% get_static_prefix %}bootstrap-3.3.7/css/bootstrap.css" rel="stylesheet"> <link href="{% get_static_prefix %}Dashboard Template for Bootstrap_files/dashboard.css" rel="stylesheet"> <link rel="stylesheet" href="{% get_static_prefix %}font-awesome-4.7.0/css/font-awesome.css">
七、自定义inclusion_tag
1、在app下创建templatetags的python包 templatetags名字不能变
2、在包下定义一个python文件 例如 mytag.py
3、编辑文件
from django import template
register =template.Library()
举例
from django import template register = template.Library() @register.filter() def add_str(value): return value + '_666' @register.inclusion_tag('api/pagenation.html') def fun(total, current_num): return {'total': range(1, total + 1), 'current_num': current_num}
4、定义函数
可以接受参数
返回一个字典
5、函数上加上装饰器
@register.inclusion_tag('需要渲染的页面.html')
6、函数返回的字典,交给页面渲染
页面渲染举例:
<nav aria-label="Page navigation" class="pull-right"> <ul class="pagination"> <li> <a href="#" aria-label="Previous"> <span aria-hidden="true">«</span> </a> </li> {% for num in total %} {% if num == current_num %} <li class="active"><a href="#">{{ num }}</a></li> {% else %} <li><a href="#">{{ num }}</a></li> {% endif %} {% endfor %} <li> <a href="#" aria-label="Next"> <span aria-hidden="true">»</span> </a> </li> </ul> </nav>
7、调用举例:
{% load myset %} {% fun 5 2 %}