zoukankan      html  css  js  c++  java
  • Django模板-模板标签

    接着Django模板-基础知识继续写模板相关知识。

    if标签

     {% if %} 标签接受 and , or 或者 not 关键字来对多个变量做判断 ,或者对变量取反( not )。

    但是不允许在同一个标签中同时使用 and 和 or,下边是不合法的:

    {% if athlete_list and coach_list or cheerleader_list %}

    多次使用同一个逻辑操作符是没有问题的,但是我们不能把不同的操作符组合起来。

    {% if athlete_list or coach_list or parent_list or teacher_list %}

    系统不支持用圆括号来组合比较操作。如果需要用到圆括号来组合表达你的逻辑式,考虑将它移到模板之外处理,然后以模板变量的形式传入。或者仅仅用嵌套的{% if %}标签替换。

    另外,并没有 {% elif %} 标签(注意区分Python语法和Django模板语法), 请使用嵌套的‘{% if %}’ 标签来达成同样的效果。

    最后,一定要用 {% endif %} 关闭每一个 {% if %} 标签。

    for标签

    {% for %}标签允许我们在一个序列上迭代。

    给定一个运动员列表 athlete_list 变量,我们可以使用下面的代码来显示这个列表

    <ul>
    {% for athlete in athlete_list %}
        <li>{{ athlete.name }}</li>
    {% endfor %}
    </ul>

    给标签增加一个 reversed 使得该列表被反向迭代

    {% for athlete in athlete_list reversed %}
    ...
    {% endfor %}

    在执行循环之前先检测列表的大小是一个通常的做法,当列表为空时输出一些特别的提示。

    {% if athlete_list %}
        {% for athlete in athlete_list %}
            <p>{{ athlete.name }}</p>
        {% endfor %}
    {% else %}
        <p>There are no athletes. Only computer programmers.</p>
    {% endif %}

    因为这种做法十分常见,所以`` for`` 标签支持一个可选的`` {% empty %}`` 分句,通过它我们可以定义当列表为空时的输出内容 下面的例子与之前那个等价:

    {% for athlete in athlete_list %}
        <p>{{ athlete.name }}</p>
    {% empty %}
        <p>There are no athletes. Only computer programmers.</p>
    {% endfor %}

    Django中for标签不支持退出循环操作,也不支持continue语句。

    在每个 {% for %} 循环里有一个称为‘forloop’ 的模板变量。这个变量有一些提示循环进度信息的属性,forloop.counter 总是一个表示当前循环的执行次数的整数计数器。这个计数器是从1开始的,所以在第一次循环时 forloop.counter 将会被设置为1。

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

    forloop.counter0 类似于 forloop.counter ,但是它是从0计数的。

    forloop.revcounter 是表示循环中剩余项的整型变量。

    forloop.revcounter0 类似于 forloop.revcounter ,但它以0做为结束索引。

    forloop.first 是一个布尔值,如果该迭代是第一次执行,他被置为True

    forloop.last 是一个布尔值;在最后一次执行循环时被置为True

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

    forloop.parentloop 是一个指向当前循环的上一级循环的 forloop 对象的引用(在嵌套循环的情况下)

    ifequal/ifnotequal标签

    {% ifequal %} 标签比较两个值,当他们相等时,显示在 {% ifequal %} 和 {% endifequal %} 之中所有的值。

    {% ifequal user currentuser %}
        <h1>Welcome!</h1>
    {% endifequal %}

    和 {% if %} 类似, {% ifequal %} 支持可选的 {% else%} 标签:

    {% ifequal section 'sitenews' %}
        <h1>Site News</h1>
    {% else %}
        <h1>No News Here</h1>
    {% endifequal %}

    只有模板变量,字符串,整数和小数可以作为 {% ifequal %} 标签的参数,其他任何类型,例如Python的字典类型、列表类型、布尔类型,不能用在 {% ifequal %} 中

    {# okay below #}
    {% ifequal variable 1 %}
    {% ifequal variable 1.23 %}
    {% ifequal variable 'foo' %}
    {% ifequal variable "foo" %}
    
    {# error below #}
    {% ifequal variable True %}
    {% ifequal variable [1, 2, 3] %}
    {% ifequal variable {'key': 'value'} %}

    如果你需要判断变量是真还是假,请使用 {% if %} 来替代 {% ifequal %} 。

    注释标签

     单行注释使用 {# #} 

    {# This is a comment #}

    多行注释,可以使用{% comment %}模板标签

    {% comment %}
    This is a
    multi-line comment.
    {% endcomment %}

    过滤器

    过滤器使用管道字符(|)

    示例: {{ name|lower }}

    过滤管道可以被套接,就是说,一个过滤器管道的输出又可以作为下一个管道的输入,如此下去。 下面的例子实现查找列表的第一个元素并将其转化为大写。

    {{ my_list|first|upper }}

    有些过滤器有参数。 过滤器的参数跟随冒号之后并且总是以双引号包含。 例如:

    {{ bio|truncatewords:"30" }}

    这个将显示变量 bio 的前30个词。

    addslashes : 添加反斜杠到任何反斜杠、单引号或者双引号前面。 这在处理包含JavaScript的文本时是非常有用的。

    date : 按指定的格式字符串参数格式化 date 或者 datetime 对象, 范例:
    {{ pub_date|date:"F j, Y" }}

    length : 返回变量的长度。 对于列表,这个参数将返回列表元素的个数。 对于字符串,这个参数将返回字符串中字符的个数。 你可以对列表或者字符串,或者任何知道怎么测定长度的Python 对象使用这个方法(也就是说,有 __len__() 方法的对象)。

    小结

    基本copy书上的,自己摘出一部分,东西太多,没有进行测试。接下来的内容会以运行示例来说明。

  • 相关阅读:
    Sql Server 收缩日志文件原理及always on 下的实践
    SQL Agent服务无法启动如何破
    Sql Server Always On 读写分离配置方法
    SQL SERVER 9003错误解决方法 只适用于SQL2000
    SQL Server 数据库分离与附加
    SQL SERVER 的模糊查询 LIKE
    sqlserver 时间格式函数详细
    浅谈SQL Server中的三种物理连接操作
    谈一谈SQL Server中的执行计划缓存(下)
    asp.net获取当前系统的时间
  • 原文地址:https://www.cnblogs.com/cotton/p/3835297.html
Copyright © 2011-2022 走看看