• 模板引擎


    django模板查找机制

    1. 先在settings指定的目录下查找,
    2. djangocontribadmin emplates
    3. djangocontribauth emplates
    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}   # 传入上下文对象
  • 相关阅读:
    mbed TLS 介绍
    PostGIS:Working with Raster Data
    TIN数据格式:DEM的三种表示方法之一
    ArcScene显示DEM
    Python与MapNik 等高线渲染&抽稀
    Android GPS定位
    osmdroid通过点击获取当前坐标
    osmdroid高级教程
    mongodb 用户 权限 设置 详解
    Mongodb设置用户权限(整理版)
  • 原文地址:https://www.cnblogs.com/hanqian/p/7029414.html
Copyright © 2020-2023  润新知