模板语言

Posted 韩乾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板语言相关的知识,希望对你有一定的参考价值。

 

django模板查找机制

  1. 先在settings指定的目录下查找,
  2. django\contrib\admin\templates
  3. django\contrib\auth\templates
  4. 然后去每个app下的templates中查找
  5. 找到即停止查找,否则Template Not Found

 

属性的访问

使用 "." 来访问变量的属性
当模板系统遇到 "." 的查询顺序
  1. 字典查询(Dictionary lookup)
  2. 属性或方法查询(Attribute or method lookup)
  3. 数字索引查询(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
 
使用方式
  1. 创建一个base.html控制整个站点的框架
  2. 站点的每个分支都创建一个父模板,最后继承Base.html
  3. 为每种页面类型创建独立的模板
{% block title %} {% endblock %}            # 父模板中定义
{% extends "base.html" %}                   # 子模版继承base.html
{% block titel %} <a>xxx</a> {% endblock %}  # 具体内容
{% include "public"}                         # 导入公共模板
{% include "public.html" with obj=uset_list}   # 传入上下文对象

 

 

以上是关于模板语言的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段2——.vue文件的模板

VSCode自定义代码片段(vue主模板)

Eclipse 中的通用代码片段或模板

调用模板化成员函数:帮助我理解另一个 *** 帖子中的代码片段

vscode代码片段生成vue模板

xml Eclipse模板(代码片段)检查参数并最终抛出IllegalArgumentException