模板语言
Posted 韩乾
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板语言相关的知识,希望对你有一定的参考价值。
django模板查找机制
- 先在settings指定的目录下查找,
- django\contrib\admin\templates
- django\contrib\auth\templates
- 然后去每个app下的templates中查找
- 找到即停止查找,否则Template Not Found
属性的访问
使用 "." 来访问变量的属性
当模板系统遇到 "." 的查询顺序
- 字典查询(Dictionary lookup)
- 属性或方法查询(Attribute or method lookup)
- 数字索引查询(Numeric index lookup)
过滤器
使用管道符号 (|)来应用过滤器,如{{ name|lower }}。将在变量 {{ name }} 使用 lower 过滤后再显示它的值
{{ value2|safe }} 将字符串标记为在输出之前不需要进一步的html转义 {{ list|join:", "}} 列表转字符串 {{ value|urlencode }} url编码 {{ value|first }} 列表第一个元素 {{ value|last }} 列表最后一个元素 {{ value|random }} 随机返回 {{ value|length }} 返回值的长度 {{ value|length_is:"4" }} 如果值的长度是4,则返回True {{ value|linenumbers }} 显示带行号的文本 {{ value|default:"nothing" }} 如果 value没有被提供,或者为空, 上面的例子将显示“nothing”。 {{ value|filesizeformat }} 如果 value 是 123456789,输出将会是 117.7 MB。 {{ value4|date:‘Y-m-d‘ }} 转换时间格式 {{ value2|add:3 }} value2+3 int类型 {{ value|capfirst }} 大写变量的第一个字母,django--> DjangoTemplates {{ value|cut:"-" }} 删除字符串中的 "-" {{ value|dictsort:"name" }} 接受一个字典列表,并返回按参数中给出的键排序后的列表。 dictsortreversed 反序 {{ value|divisibleby:"3" }} 如果value可以被给出的参数整除,则返回 True {{ value|truncatechars:9 }} 如果字符串字符多于指定的字符数量,那么会被截断
详情参考:http://python.usyiyi.cn/django/topics/class-based-views/index.html
自定义过滤器
文件结构
包含一个templatetags 目录,和models.py、views.py等文件处于同一级别目录下。
mysite/ ├── blog │ ├── __init__.py │ ├── models.py │ ├── templatetags │ │ ├── blog_extras.py │ │ └── __init__.py │ └── views.py
在添加这个模块以后,在模板里使用标签或过滤器之前你将需要重启服务器。
定义filter
from django import template register = template.Library()
@register.filter(is_safe=True) # 只能接受两个参数 def filter_multi(var,bar): # var是变量值, bar是选项值 return var * bar 模板文件 <!DOCTYPE html> {% load blog_extras %} # 导入定义的.py文件 <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <p>filter--->{{ x|filter_multi:20 }}</p> </body> </html>
自定义模板标签
from django import template register = template.Library() @register.simple_tag # 可以接受多个参数 def simple_tag_multi(v1,v2,v): return v1 * v2 * v 调用方法与filter相同
inclusion标签
通过渲染另一个模板来显示数据
定义标签
# blog/templatetags/inclusion_tag.py from django import template register = template.Library() @register.inclusion_tag(‘include.html‘) def inc_test(xxx): value3 = [ {"title":"aaa"}, {"title":"bbb"}, {"title":"ccc"} ] return {"value":value3}
用于渲染的模板
# include.html <ul> {% for i in value %} <li>{{ i.title }}</li> {% endfor %} </ul>
在父模板中载入
# base.html {% load inclusion_tag %} <h1>base</h1> {% inc_test xxx %}
模板继承
模板继承可以创建一个基本的 “骨架” 模板
它包含站点中的全部元素
并且可以定义能够被子模版覆盖的block
当模板系统处理子模版时,首先定位父模板,并用子模版中的block替换掉父模板的block
使用方式
- 创建一个base.html控制整个站点的框架
- 站点的每个分支都创建一个父模板,最后继承Base.html
- 为每种页面类型创建独立的模板
{% block title %} {% endblock %} # 父模板中定义 {% extends "base.html" %} # 子模版继承base.html {% block titel %} <a>xxx</a> {% endblock %} # 具体内容 {% include "public"} # 导入公共模板 {% include "public.html" with obj=uset_list} # 传入上下文对象
以上是关于模板语言的主要内容,如果未能解决你的问题,请参考以下文章