zoukankan      html  css  js  c++  java
  • Django标签和过滤器

    过滤器格式{{   }}

    标签格式{%  %}

    模板中过滤器filter只能使用一个参数,自定义标签中则可以使用多个参数!!!

    过滤器能够采用链式的方式使用,例如:{{ text | escape | linebreaks }}

    过滤器的参数中如果带有空格,那么需要用引号引起来,例如:{{ list | join : ", "}}

    标签参数不限,但不能放在if for语句中,就是当前if for那句代码里,在if for 其他地方可以使用!而过滤器可以用在if for语句中

    for
    {% for %}标签允许你按顺序遍历一个序列中的各个元素
    Pythonfor语句语法为for X in YX是用来遍历Y的变量
    每次循环模板系统都会渲染{% for %}{% endfor %}之间的所有内容
    例如,显示给定athlete_list变量来显示athlete列表:

    1. <ul>  
    2. {% for athlete in athlete_list %}  
    3. <li>{{ athlete.name }}</li>  
    4. {% endfor %}  
    5. </ul>  


    在标签里添加reversed来反序循环列表:

    1. {% for athlete in athlete_list reversed %}  
    2. ...  
    3. {% endfor %}  
    4. {% for %}标签可以嵌套:  
    5. {% for country in countries %}  
    6. <h1>{{ country.name }}</h1>  
    7. <ul>  
    8. {% for city in country.city_list %}  
    9. <li>{{ city }}</li>  
    10. {% endfor %}  
    11. </ul>  
    12. {% endfor %}  


    系统不支持中断循环,如果你想这样,你可以改变你想遍历的变量来使得变量只包含你想遍历的值
    类似的,系统也不支持continue语句,本章后面的哲学和限制会解释设计的原则
    {% for %}标签内置了一个forloop模板变量,这个变量含有一些属性可以提供给你一些关于循环的信息
    1forloop.counter表示循环的次数,它从1开始计数,第一次循环设为1,例如:

    1. {% for item in todo_list %}  
    2. <p>{{ forloop.counter }}: {{ item }}</p>  
    3. {% endfor %}  


    2forloop.counter0类似于forloop.counter,但它是从0开始计数,第一次循环设为0
    3forloop.revcounter表示循环中剩下的items数量,第一次循环时设为items总数,最后一次设为1
    4forloop.revcounter0类似于forloop.revcounter,但它是表示的数量少一个,即最后一次循环时设为0
    5forloop.first当第一次循环时值为True,在特别情况下很有用:

    1. {% for object in objects %}  
    2. {% if forloop.first %}<li class="first">{% else %}<li>{% endif %}  
    3. {{ object }}  
    4. </li>  
    5. {% endfor %}  


    6forloop.last当最后一次循环时值为True

    1. {% for link in links %}{{ link }}{% if not forloop.last %} | {% endif %}{% endfor %}  


    7forloop.parentloop在嵌套循环中表示父循环的forloop

    1. {% for country in countries %}  
    2. <table>  
    3. {% for city in country.city_list %}  
    4. <tr>  
    5. <td>Country #{{ forloop.parentloop.counter }} </td>  
    6. <td>City #{{ forloop.counter }}</td>  
    7. <td>{{ city }}</td>  
    8. </tr>  
    9. {% endfor %}  
    10. </table>  
    11. {% endfor %}  


    富有魔力的forloop变量只能在循环中得到,当模板解析器到达{% endfor %}forloop就消失了
    如果你的模板context已经包含一个叫forloop的变量,Django会用{% for %}标签替代它
    Django会在for标签的块中覆盖你定义的forloop变量的值
    在其他非循环的地方,你的forloop变量仍然可用
    我们建议模板变量不要使用forloop,如果你需要这样做来访问你自定义的forloop,你可以使用forloop.parentloop

    一些实用但较少见的内建标签

    comment

    注释,{% comment %} 和 {% endcomment %}之间的内容被解释为注释

    firstof

    返回列表中第一个可用(非False)的变量或者字符串,注意的是firstof中的变量非自动转义

    {% firstof var1 var2 var3 "fallback value" %}

    for

    for循环,可以在后面加入reversed参数遍历逆序的列表

    {% for obj in list reversed %}

    for...empty

    如果for循环的参数-列表为空,将执行empty里面的内容

    <ul>
    {% for athlete in athlete_list %}
        <li>{{ athlete.name }}</li>
    {% empty %}
        <li>Sorry, no athlete in this list!</li>
    {% endfor %}
    <ul>

    default_if_none
                 使用形式:{{ value | default_if_none:"nothing" }},例如,如果value是None,那么输出将是nothing
                 意义:如果value是None,那么输出将使用缺省值

    length
    使用形式:{{ value | length }}
    意义:返回value的长度。

    wordcount
    返回字符串中单词的数目

    自定义标签和自定义过滤器

    在app目录下建一个子目录,目录名称必须为templatetags,然后在该目录下新建一个.py文件(如Mytag.py),在该文件具体自定义标签和过滤器

    #!/usr/bin/env python  
    # _*_ coding:utf-8 _*_
    # @File : blog/BlogAPP/templatetags/Mytag.py
    from django import template
    register = template.Library()

    # 自定义一个有关时间转化的过滤器
    @register.filter
    def beijingtime(t):
    """
    参数 t 的类型为datetime.datetime,形式如2017-09-11 23:12:34.634145 <class 'datetime.datetime'>
    """
    from datetime import datetime
    return datetime.fromtimestamp(t.timestamp()).strftime("%Y-%m-%d %H:%M")


    # 自定义一个css路径的标签
    @register.simple_tag
    def rbac_css():
        file_path = os.path.join('ql','theme','rbac.css')
    if os.path.exists(file_path):
    return mark_safe(open(file_path,'r',encoding='utf8').read())
    else:
    raise Exception("rbac主题未找到")

    用法如下在模板html中
    {% load Mytag %}
    <style>
    {% rbac_css %}
    </style>
    <span>{{ comment_item.creat_time|beijingtime }}</span>
     
  • 相关阅读:
    天轰穿C# vs2010 04面向对象的编程之隐藏基类方法【原创】
    学云网助阵软博会 云教育平台备受关注
    天轰穿C# vs2010 04面向对象的编程之多态【原创】
    编程可以如此简单 学云网校园技术之旅
    天轰穿C# vs2010 04面向对象的编程之重载运算符【原创】
    天轰穿C# vs2010 04面向对象的编程之虚成员和重写【原创】
    天轰穿C# vs2010 04面向对象的编程之抽象类和抽象方法【原创】
    直播:1996年—2012年,哥从农民到清华大学出书的奋斗史
    天轰穿C# vs2010 04面向对象的编程之运算符重载的示例【原创】
    .天轰穿C# vs2010 04面向对象的编程之接口 VS 抽象类 【原创】
  • 原文地址:https://www.cnblogs.com/ALXPS/p/7638258.html
Copyright © 2011-2022 走看看