• Django 模板语法


    Django官方文档

    可见https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#std:templatetag-for

    和python一样,Django也有自己的语法

    后台向模板传递对象

    传函数名到前端,会自动加括号调用,但是不支持传参

    对象:打印了这个对象  

    Django模板语法

    两种标记符号

    {{  }}   与变量相关 

    {% %}与语法相关

    遇到点号(.)查询优先级

    1.字典的值             最高

    2.属性或方法查询  其次

    3.数字索引查询      最低

    变量

    通过索引:

      列表.索引值

    通过方法:

      但是只能使用不带参数的语法

    过滤器 针对遍历

    本质:把管道左边当作第一个参数传递给右边的方法

    values   
    {{ value|default:"nothing"}}
    如果values是False或null 使用默认值nothing
    
    length
    {{ value|length }}
    计算value 长度
    
    
    filesizeformat
    格式化文件大小
    {{ value|length }}
    
    slice
    切片字符串
    {{value|slice:"2:-1"}}
    
    date
    没有%
    {{ value|date:"Y-m-d H:i:s"}}

        truncatechars 

        {{ value|truncatechars:9}}  value大于多于多少长度 剩下部分用省略号表示

        truncatewords  {{ value|truncatechars:9}}   相当于按照空格切片取values个分组    
    如:haha1 hahah2 hahaha3 haahha4 hahah5 ha5 ah6   values3就是 haha1 hahah2 hahaha3


    cut
    {{ value|cut:' ' }}
    移除value中所有的与给出的变量相同的字符串

     join

    str.join(list) 



    
    

     

      

     safe 

    在前端取消转移 变为html代码

    {{ dict_obj.name|safe }}

    后端:from django.utils.safestring import mark_safe
    xxx = mark_safe('<h1>我是h1标签</h1>') #把xxx转为真正安全的html代码

    标签

    for循环

    {% for foo in l %}
    	<p>{{ foo }}</p>
    	<p>{{ forloop }}</p>
    {% endfor %}
    
    forloop 是一个字典  {'parentloop': {}, 'counter0': 0, 'counter': 1, 'revcounter': 5, 'revcounter0': 4, 'first': True, 'last': False} 
    parentloop 是上级循环
    forloop

    {% empty %}和 {% endfor %} 同级
    <ul>
    {% for user in user_list %}
        <li>{{ user.name }}</li>
    {% empty %}
        <li>空空如也</li>
    {% endfor %}
    </ul>
    

      

    if判断

    {% if a %}
      you a
    {% elif b %}
      you b
    {% else %}
      没有用户
    {% endif %}
    

      

    with 别名

    {% with total=business.employees.count %}
        {{ total }} employee{{ total|pluralize }}
    {% endwith %}

     或者

    {% with business.employees.count as total %}
        {{ total }} employee{{ total|pluralize }}
    {% endwith %}

    自定义 过滤器 标签   inclusion_tag

    自定义过滤器(最多一个参数)

    1.在app下新建 templatetags

    2.建立py

    3. 导入

    from djago import template

    register = template.Library()

    4.过滤器由  @register.filter(name="cut") 装饰

    5.返回结果

    @register.filter(name="cut")
    def cut(value, arg):
        return value.replace(arg, "")

    6 导入py文件 

    {{ somevariable|cut:"0" }}
    {{ d.name|addSB }}

    自定义标签

    @register.simple_tag
    def plus(a,b,c):
      return a+b+c

    {% plus 1 2 3 %}  用的是方法

    自定义inclusion_tag

    如果提示  Django: is not a registered tag library.

    在setting.py

    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR, 'templates')]
            ,
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            'libraries': {
                "my_tag": "app01.templatetags.xxx",
            },
            },
        },
    ]
    

    {% 别名 参数%} 拿到页面

     模板的继承与导入

    一般来说 我们模块的话有三个块  一个JS块一个内容 一个css

     

    如果要继承原来的

    {{ block.super }}

     

     

     

     导入组件

    {% include "cbs.html" %}

    静态文件相关

    {% load static %}
    <img src="{% static 'images/hi.jpg' %}" alt="Hi!" />
    起别名:方便导入{% static "images/hi.jpg" as myphoto %}



    常用语法:{{ XXX}},{% xxx %}

    举个例子

    def template_test(request):
        l = [11, 22, 33]
        d = {"name": "alex"}
    
        class Person(object):
            def __init__(self, name, age):
                self.name = name
                self.age = age
    
            def dream(self):
                return "{} is dream...".format(self.name)
    
        Alex = Person(name="Alex", age=34)
        Egon = Person(name="Egon", age=9000)
        Eva_J = Person(name="Eva_J", age=18)
    
        person_list = [Alex, Egon, Eva_J]
        return render(request, "template_test.html", {"l": l, "d": d, "person_list": person_list})

    然后在 template_test.html 可以引用这个变量

    
    
    {# 取l中的第一个参数 #}
    {{ l.0 }}
    {# 取字典中key的值 #}
    {{ d.name }}
    {# 取对象的name属性 #}
    {{ person_list.0.name }}
    {# .操作只能调用不带参数的方法 #}
    {{ person_list.0.dream }}

    Filters(过滤器)

    在Django的模板语言中,通过使用 过滤器 来改变变量的显示。

    过滤器的语法: {{ value|filter_name:参数 }}

    使用管道符"|"来应用过滤器。

    例如:{{ name|lower }}会将name变量应用lower过滤器之后再显示它的值。lower在这里的作用是将文本全都变成小写。

    注意事项:

    1. 过滤器支持“链式”操作。即一个过滤器的输出作为另一个过滤器的输入。
    2. 过滤器可以接受参数,例如:{{ sss|truncatewords:30 }},这将显示sss的前30个词。
    3. 过滤器参数包含空格的话,必须用引号包裹起来。比如使用逗号和空格去连接一个列表中的元素,如:{{ list|join:', ' }}
    4. '|'左右没有空格没有空格没有空格

    Django的模板语言中提供了大约六十个内置过滤器。

    我们简单介绍下里面常用的过滤器。

    default

    如果value没有值 即为空,则赋值为nothing
    {{ value|default:"nothing"}}

    length

    返回值的长度,作用于字符串和列表。
    
    {{ value|length }}
    
    返回value的长度,如 value=['a', 'b', 'c', 'd']的话,就显示4.

    filesizeformat

    将值格式化为一个 “人类可读的” 文件尺寸 (例如 '13 KB''4.1 MB''102 bytes', 等等)。例如:

    {{ value|filesizeformat }}

    如果 value 是 123456789,输出将会是 117.7 MB。

    slice

    切片

    {{value|slice:"2:-1"}}
    如果value 是一个列表的话
    如 value=['a', 'b', 'c', 'd']的话,就显示
    ['c']

    safe

    不做介绍,一句话让 字符串变为 HTML 代码

    我们简单介绍下里面常用的模板

    comment

    注释

    {%  comment  "Optional note" %}
    adasdasdasasdasd
    {% endcomment %}

    truncatechars

    一定字符串之后显示...例如我们常见网页的详解

    {{ value|truncatechars:9}}

    在介绍block之前我们先介绍下母版

    cut

    移除value中所有的与给出的变量相同的字符串

    {{ value|cut:' ' }}
    切掉空格

    join

    每个value字符串后拼一个内容

    block

    此模块可以用来继承母版

  • 相关阅读:
    飞鸽传书中文源码
    nohup命令参考
    Linux平台编程新手入门 C语言中的移位操作
    小技巧:让linux程序在后台运行
    2440之中断管理
    linux终端中输出彩色字体(C/SHELL)
    C语言标准中的逻辑位移和算术位移
    SQL2005利用ROW_NUMER实现分页的两种常用方式
    不用现有方法,把string转换成int型[C#]
    C# 如何生成一个时间戳
  • 原文地址:https://www.cnblogs.com/xzqpy/p/11000639.html
Copyright © 2020-2023  润新知