Django基础之模板层
内容概要
-
模板语法传值
模板语法过滤器(内置方法)
模板语法标签(流程控制)
自定义过滤器和标签(了解) -
内容详细
1 模板层之模板语法传值
https://www.cnblogs.com/Dominic-Ji/articles/11109067.html#_label15 注释 <!--HTML注释--> 浏览器能够查看 {#模板语法注释#} 浏览器查看不了 def reg(request): # python基本数据类型 f = 1.1 i = 11 s = 'hello world' l = [11,22,33,44] d = {'username':"jason",'password':123} t = (11,22,33,44,55,66,77) se = {11,22,33,44,55,66} b = True # 函数(自动加括号调用函数 展示的是函数的返回值) def func(args): # 模板语法不支持给函数传递额外的参数 print('from func') return '下午有点困' # 面向对象 class MyClass(object): # 自动加括号实例化产生对象 def get_obj(self): return 'from obj' @classmethod def get_cls(cls): return 'from cls' @staticmethod def get_func(): return 'from func' obj = MyClass() # 1.指名道姓的传(需要传的值较少) # return render(request,'reg.html',{...}) # 2.一次性批量传(效率偏低) 为了教学方便我们使用locals居多 # return render(request, 'reg.html',locals()) return render(request,'reg.html',locals())
2 模板语法取值
取值只能使用句点符(.)
<p>{{ l.0 }}</p>
<p>{{ d.username }}</p>
<p>{{ d.hobby.3.addr }}</p>
3 模板语法之过滤器(内置方法)
<p>过滤器: 管道符 左侧当做过滤器的第一个参数 右侧有时候还可以支持再传一个参数(冒号开头)</p> <p>统计长度:{{ l|length }}</p> <p>自增运算:{{ i|add:123 }}、拼接操作:{{ s|add:'去你妹的' }}</p> <p>日期转换:{{ ctime }}、{{ ctime|date:'Y-m-d' }}</p> <p>文件大小:{{ file_size|filesizeformat }}</p> <p>截取字符(三个点也算):{{ desc|truncatechars:6 }}</p> <p>截取单词(三个点不算):{{ desc|truncatewords:3 }}</p> <p>切片操作:{{ s|slice:'0:4' }}</p> <p>默认值(判断布尔值):{{ b|default:'这个东西布尔值是False' }}</p> <p>文本转义:{{ ht|safe }}</p> <p>文本转义:{{ xss }}</p> <p>文本转义:{{ ht1 }}</p> 后端转义 from django.utils.safestring import mark_safe ht1 = '<h1>一级标题</h1>' ht1 = mark_safe(ht1)
4 模板语法之标签(流程控制)
{{}} 变量相关(引用变量值) {%%} 逻辑相关(流程控制 模块方法) <p>标签: 流程控制</p> {% for i in lll %} {% if forloop.first %} <p>这是我的第一次循环</p> {% elif forloop.last %} <p>这是我的最后一次循环</p> {% else %} <p>{{ i }}</p> {% endif %} {% empty %} <p>该对象里面没有值</p> {% endfor %}
5 自定义过滤器、标签、inclusion_tag
1.在应用下创建一个名字必须叫templatetags文件夹 2.在该文件夹内创建一个任意名称的py文件 3.在py文件内必须要书写两行固定的代码 from django.template import Library register = Library() # 自定义过滤器 @register.filter(is_safe=False,name='aaa') def my_plus(a,b): return a + b # 自定义标签(自定义函数) @register.simple_tag(name='bbb') def func(a,b,c,d): return '%s-%s-%s-%s'%(a,b,c,d) # 自定义inclusion_tag(自行概括) @register.inclusion_tag(filename='ccc.html',name='myinc') def index(n): new_l = ['第%s页'%i for i in range(1,n+1)] return locals()
6 模板的继承(使用频率较高)
需求 页面主体不变 部分区域变化 模板继承 1.需要现在母版中使用block提前划定区域 {% block 区域名称 %} {% endblock %} 2.在子版中先继承再局部替换 {% extends '模版.html' %} {% block 区域名称 %} {% endblock %} 总结 模板一般情况下都应该至少含有三个区域 css区域 content区域 js区域 补充 {{ block.super }} 调用模版内容
7 模板的导入
{% include 'myform.html' %}
愿君前程似锦,归来仍是少年