Dates

  • {% now "m/d/Y" %}

copyright {% now 'Y' as current_year %}

该tag也可以接受Django的date 变量,比如{% now 'SHORT_DATETIME_FORMAT' %}--> 09/05/2020 10:59 p.m.

{% now 'SHORT_DATE_FORMAT' %}-->09/05/2020

{% now 'DATE_FORMAT' %}-->Sept. 5, 2020

Forms

tag里使用{% csrf_token %}来防止跨域伪造请求攻击。

比较操作

  • {% if %}和{% elif %}和

    与python 语法类似,不再赘述

  • {% first of %}是一个输出第一个不是空的变量的快捷用法。

    #urls.py
    {'var1':'','var2':1,'var3':2 }
    {% firstof var1 var2 var3 %}

    {% if %},{% elif %}的等效方法:

    #firstof example
    {% firstof var1 var2 var3 %} #Equivalent of firstof example
    {%if var1 %}
    {{ var1|safe }}
    {% elif var2 %}
    {{ var2|safe }}
    {% elif var3 %}
    {{ var3|safe }}
    {% endif %} # Firstof example with a default value in case of no match( that is meaning all variables are empty)
    {% firstof var1 var2 var3 'All vars are empty' %} #Assign the firstof result to another variable
    {% firstof var1 var2 var3 as resultof %}
  • {% if in %}, {% if not in %}

  • {% if is value %}, {% if is not value %}

  • {% if value| %}

    比如:

    #urls.py
    {'drinklist':['coco','cola','milk'],'userdrink':'cola'}
    {% if drinklist|random == userdrink %}
    Yes it is
    {% else %}
    No
    {% endif %}

需要注意的是,在{% if %}里不允许有“()”,比如{% if drink in specials or drink== drink_of_day %},不能写成 {% if (drink in specials) or (drink== drink_of_day) %}

Loops

  • {% for %},以及带{% empty %}的

    #urls.py
    {'drinks':['cola','coco','water']}
    #html
    {% for drink in drinks %}
    {{ drink }}
    {% endfor %}

#urls.py
{'drinks':[]}
{% for drink in drinks %}
{{ drink }}
{% empty %}
No drinks here
{% endfor %}

{% for %}也产生了一系列变量来对遍历过程进行控制:

Variable Description
forloop.counter The current iteration of the loop(1-indexed)
forloop.counter0 The current iteration of the loop(0-indexed)
forloop.revcounter The number of the iterations from the end of the loop(1-indexed)
forloop.revcounter0 The number of the iterations from the end of the loop(0-indexed)
forloop.first True,if it's the first time through the loop
forloop.last True,if it's the last time through the loop
#urls.py
'drinks':['water','cola','coco','milk']
#html
{% for drink in drinks %}
<b>{{ drink }}</b><br>
forloop.counter-->{{ forloop.counter }}<br>
forloop.counter0-->{{ forloop.counter0 }}<br>
forloop.revcounter0-->{{ forloop.revcounter0 }}<br>
forloop.revcounter-->{{ forloop.revcounter }}<br>
forloop.first-->{{ forloop.first }}<br>
forloop.last-->{{ forloop.last }}<br>
{% empty %}
No drinks here
{% endfor %}

  • (1)一般放在{% for %}内,循环时,依次取其参数,如:

    #urls.py
    'drinks':['water','cola','coco','milk','coffee','wanglaoji']
    #base.html
    <!DOCTYPE html>
    <head>
    <title>
    {% block title_block %}
    Base
    {% endblock %}
    </title>
    <style>
    .red {
    color:red;
    }
    .blue {
    color:blue;
    }
    .yellow {
    color:yellow;
    }
    </style>
    </head>
    <body>
    {% block body_block %}
    {% endblock %}
    </body>
    #rendered.html
    {% extends 'banners/base.html' %}
    {% block title_block %}
    test
    {% endblock %} {% block body_block %}
    <url>
    {% for drink in drinks %}
    <li class="{% cycle 'red' 'yellow' 'blue' %}">{{ drink }}</li>
    </url>
    {% endfor %}
    {% endblock %}

    drink在drinks中循环时,每次循环,依次取'red',‘yellow','blue',然后周而复始,如下:

{% cycle %} 的参数也可以是变量,如将上述urls.py和rendered.html换成如下,效果一样:

#urls.py
'drinks':['water','cola','coco','milk','coffee','wanglaoji'],'r':'red','b':'blue','y':'yellow'
#rendered.html
{% extends 'banners/base.html' %}
{% block title_block %}
test
{% endblock %} {% block body_block %}
<url>
{% for drink in drinks %}
<li class="{% cycle r y b %}">{{ drink }}</li>
</url>
{% endfor %}
{% endblock %}

(2){% cycle arg1 arg2 .. as cc %}

{% cycle %}也不一定必须要在{% for %}内,也可以放在{% for %}外,在这种情况下,每次调用{% cycle arg1,arg2 %}都返回arg1,这样就达不到循环的目的了,怎么办?此时,正是{% cycle arg1 arg2 ... as cc %} 出现的原因了,as 将{% cycle arg1 arg2 ... %} "另存为" cc,之后的事情就比较有意思: 直接调用cc将只得到上次循环后的值,也就是说如果是“保存完" cc后,直接调用cc,将返回arg1,如果 {% cycle cc %}将”迫使“ cc进行循环,这时返回arg2,如果再直接调用cc呢,将返回arg2。代码的话,见下面:

# urls.py
'drinks':['water','cola','coco','milk','coffee','wanglaoji'],'r':'red','b':'blue','y':'yellow'
{% extends 'banners/base.html' %}
{% block title_block %}
test
{% endblock %} {% block body_block %}
<url>
<li class="{% cycle r y b %}">test1</li> <li class="{% cycle r y b %}">test4</li>
<li class="{% cycle r y b %}">test5</li>
</url>
<p>以上每次都调用'{% cycle r y b %} ' 都将是第一个参数,而不能依次取后面参数的值</p>
<url>
<li class="{% cycle r y b as testas %}">test1</li><span>("另存为testas")</span>
<li class="{{ testas }}">test2</li><span>(直接调用testas)</span>
<li class="{{ testas }}">test3</li><span>(直接调用testas)</span>
<li class="{% cycle testas %}">test4</li><span>("强迫循环")</span>
<li class="{{ testas }}">test5</li><span>(直接调用testas)</span>
<li class="{{ testas }}">test6</li><span>(直接调用testas)</span>
<li class="{% cycle testas %}">test7</li><span>("强迫循环")</span>
<li class="{{ testas }}">test8</li><span>(直接调用testas)</span>
</url>
{% endblock %}

在cc后添加 ”silent", 即{% cycle arg1 arg2 ... as cc silent %},然后再{% cycle cc %}时,将只是个“强迫”循环的声明,而不返回任何值,见下:

#rendered.html
{% extends 'banners/base.html' %}
{% block title_block %}
test
{% endblock %} {% block body_block %}
<url>
<li class="{% cycle r y b %}">test1</li> <li class="{% cycle r y b %}">test4</li>
<li class="{% cycle r y b %}">test5</li>
</url>
<p>以上每次都调用'{% cycle r y b %} ' 都将是第一个参数,而不能依次取后面参数的值</p>
<url>
<li class="{% cycle r y b as testas silent %}">test1</li><span>("仅声明循环")</span>
<li class="{{ testas }}">test2</li><span>(直接调用testas)</span>
<li class="{{ testas }}">test3</li><span>(直接调用testas)</span>
<li class="{% cycle testas %}">test4</li><span>("声明循环,不返回任何值")</span>
<li class="{{ testas }}">test5</li><span>(直接调用testas)</span>
<li class="{{ testas }}">test6</li><span>(直接调用testas)</span>
<li class="{% cycle testas %}">test7</li><span>("声明循环,不返回任何值")</span>
<li class="{{ testas }}">test8</li><span>(直接调用testas)</span>
</url>
{% endblock %}

  • 重新设置循环,将循环值重新设定为第一个,如:

    #  rendered.html
    {% extends 'banners/base.html' %}
    {% block title_block %}
    test
    {% endblock %} {% block body_block %}
    <url>
    <li class="{% cycle r y b %}">test1</li> <li class="{% cycle r y b %}">test4</li>
    <li class="{% cycle r y b %}">test5</li>
    </url>
    <p>以上每次都调用'{% cycle r y b %} ' 都将是第一个参数,而不能依次取后面参数的值</p>
    <url>
    <li class="{% cycle r y b as testas %}">test1</li><span>("仅声明循环")</span>
    <li class="{{ testas }}">test2</li><span>(直接调用testas)</span>
    <li class="{{ testas }}">test3</li><span>(直接调用testas)</span>
    <li class="{% cycle testas %}">test4</li><span>("声明循环,不返回任何值")</span>
    <li class="{{ testas }}">test5</li><span>(直接调用testas)</span> <li class="{{ testas }}">test6</li><span>(直接调用testas)</span>
    {% resetcycle %}
    <p>resetcycle,下次循环不再是蓝色,而将是第一个值也就是红色</p>
    <li class="{% cycle testas %}">test7</li><span>("声明循环,不返回任何值")</span>
    <li class="{{ testas }}">test8</li><span>(直接调用testas)</span>
    </url>
    {% endblock %}

  • regroup 有点像 pandas里的groupby ,即通过某个属性将一群数据进行分组,不同的是该tag分组后会自动生成两个属性:①grouper:item that was grouped ② list: a list of all items in this group

    # urls.py
    stores=[
    {'name':'Downtown','street':'385 Main street','city':'San Diego'},
    {'name':'Uptown','street':'231 Highland avenue','city':'San Deiego'},
    {'name':'Midtown','street':'85 Balboa street','city':'Los Angeles'},
    {'name':'Downtown','street':'639 Spring street','city':'Los Angeles'},
    {'name':'Midtown','street':'1407 Broadway street','city':'Los Angeles'},
    ]
    'stores':stores
    # rendered.html
    {% regroup stores by city as city_list %}
    <ul>
    {% for city in city_list %}
    <li>{{ city.grouper }}</li>
    <ul>
    {% for item in city.list %}
    <li>{{ item.name }}:{{ item.street }}</li>
    {% endfor %}
    </ul>
    {% endfor %}
    </ul>

Python and Filter Operations

  • 可将包在{% filter %}....{% endfilter %}的部分内容全部进行过滤。

    #urls.py
    'drinks':['cola','milk','water']
    #rendered.html
    {% filter upper %}
    {% for drink in drinks %}
    {{ drink }}
    {% endfor %}
    {% endfilter %}

  • 对于创建没有被view方法或者必须通过“高昂”的操作才能得到的变量,用该tag就会非常方便。

    #urls.py
    'drink_cost':2
    #rendered.html
    {% with drinktax=drink_cost drinkpro=drink_cost %}
    {{ drinktax}}<br>
    {{drinkpro}}
    {% endwith %}

Spacing and Special Characters

  • 在{% autoescape on %}...{% endautoescape %}之间的将被转义:

    # urls.py
    'drink_cost':'<b>escape?</b>'
    # rendered.html
    {% autoescape on %}
    {{ drink_cost }}
    {% endautoescape %}

{% autoescape off %}
{{ drink_cost }}
{% endautoescape %}

  • {% spaceless %}...

    仅仅移除tag之间的空隙。

  • 用于输出组成template tag的特殊符号:

    Argument Outputs
    openblock {%
    closeblock %}
    openvariable {{
    closevariable }}
    openbrace {
    closebrace }
    opencomment {#
    closecomment #}
    #rendered.html
    {% templatetag openvariable %} url 'entry_list' {% templatetag closeblock %}

  • 在{% verbatim %}...{% endverbatim %}之间的内容将被不被渲染。也可以在该tag中添加自定义的名字,即{% verbatim mytag %}...{% endverbatim %}

    # rendered.html
    {% verbatim myblock %}
    Avoid template rendering via the {% verbatim %}{% endverbatim %} block.
    {% endverbatim myblock %}

  • {% lorem [count] [method] [random] %}

    三个可选参数:

    Argument Description
    count A number (or variable) containing the number of paragraphs or words to generate (default is 1)
    method Either w for words, p for HTML paragraphs or b for plain-text paragraph blocks (default is b).
    random The word random, which if given, does not use the common paragraph (“Lorem ipsum dolor sit amet…”) when generating text.
    # rendered.html
    {% lorem 3 p %}

    Template structures

  • {% comment %}...{% endcomment %}之间的将不被渲染

    # rendered.html
    <p>Rendered text with </p>
    {% comment %}
    <p>Commented out text with {{ create_date|date:"c" }}</p>
    {% endcomment %}

  • { # #}:单独一行注释

    <p>Great feeling</p>
    {# This is comment #}

  • URLs

Django中的内置Tags的更多相关文章

  1. 在DevExpress程序中使用内置的图标构建美观的界面元素

    在我们一般的程序中,为一般的界面元素添加一定的图标展示,有助于提升界面的整体的美观.结合排版布局,以及固定场景的图标,往往给用户非常好的直观感受:统一.美观.易理解.因此在一般的程序界面中,都尽量在略 ...

  2. Oracle中的内置函数在sql中的转换整理

    程序里面经常会即支持Oracle数据库,又支持sql数据库.而有些Oracle内置函数用的比较多,但在sql中语法有些不同,我做了些整理,希望可以帮助大家.... 1.oracle中的内置函数:ora ...

  3. ThinkPHP中的内置标签

    ThinkPHP中的内置标签 1.内置标签分类 闭合标签 <tag></tag> 开放标签 <tag /> 2.包含文件标签 主要功能:实现对文件的包含(类似于re ...

  4. C#使用Word中的内置对话框实例

    本文实例讲述了C#使用Word中的内置对话框的方法,分享给大家供大家参考.具体实现方法如下: 使用 Microsoft Office Word 时,有时需要显示用户输入对话框.虽然可以创建自己的对话框 ...

  5. javascript中的内置对象

    2015.12.1 javascript中的内置对象 复习: 1.js中的内置函数 alert prompt write parseInt parseFloat eval isNaN document ...

  6. Python常用模块中常用内置函数的具体介绍

    Python作为计算机语言中常用的语言,它具有十分强大的功能,但是你知道Python常用模块I的内置模块中常用内置函数都包括哪些具体的函数吗?以下的文章就是对Python常用模块I的内置模块的常用内置 ...

  7. Thinkphp中的内置标签用法

    Thinkphp中的内置标签有:Volist,Foreach,For,Switch,比较标签,范围判断标签,IF,Present,Empty,Defined,Assign,Define,标签嵌套,im ...

  8. JS中的内置对象简介与简单的属性方法

    JS中的数组: 1.数组的概念: 数组是在内存中连续存储的多个有序元素的结构,元素的顺序称为下标,通过下标查找对应元素 2.数组的声明: ①通过字面量声明var arr1 = [,,,,] JS中同一 ...

  9. 秒懂ASP.NET中的内置对象

    上篇博客,小编主要简单的介绍了一下ASP.NET中的控件,这篇博客,小编主要简单总结一下ASP.NET中的内置对象,七个内置对象分别是:Request.Response.Application.Coo ...

  10. jsp篇 之 Jsp中的内置对象和范围对象

    Jsp中的内置对象: 在jsp页面代码中不需要声明,直接可以使用的对象. 一共有[9个内置对象]可以直接使用. 对象类型           名字 PageContext          pageC ...

随机推荐

  1. SM系列国密算法

    其中SM1.SM4.SM7.祖冲之密码(ZUC)是对称算法:SM2.SM9是非对称算法:SM3是哈希算法.目前,这些算法已广泛应用于各个领域中,期待有一天会有采用国密算法的区块链应用出现. 一.SM1 ...

  2. mysql 登录提示 “is not allowed to connect to this mysql server”

    解决方法一 执行 mysql -u root -p 然后输入密码登陆mysql GRANT ALL PRIVILEGES ON . TO 'myuser'@'%' IDENTIFIED BY 'myp ...

  3. 【Ryan】: linux下挂在共享文件夹

    点击查看代码 $ vmware-hgfsclient $ sudo vmhgfs-fuse .host:/ /mnt -o allow_other

  4. Selenium KPI接口 屏幕截图

    屏幕截图功能常用的有两种: savescreenshot()及 getscreenshotasfile(). 使用格式 self.driver.save_screenshot('baidu.png') ...

  5. Git Pull Failed:You have not concluded your merge.Exiting because of unfinished merge

    前言 在拉取远程代码时,出现 Git Pull Failed:You have not concluded your merge.Exiting because of unfinished merge ...

  6. 边缘检测及Canny算法

    对边缘的直观理解 边缘有助于我们对图像进行语义理解.直观上,边缘发生在图像强度值变化剧烈的地方 如何描述变化?自然是用导数/梯度 如上图,我们对图中的信号在水平方向上求导,可以得到右侧的导数图像,可以 ...

  7. 原子指令,自旋锁,CAS

    原子指令,自旋锁,CAS 问题 我们先看一下这段代码: /* * badcnt.c - An improperly synchronized counter program */ /* $begin ...

  8. 使用自制离线数据跑通ElasticFusion

    使用自制离线数据跑通ElasticFusion 实验环境及设备 实验环境: Ubuntu22.04 RTX3060 实验设备: 小米13(Android) Realsense D455 一句话总结就是 ...

  9. VSCode 中 Json 文件介绍

    Visual Studio Code 官方文档 1. Json 配置文件 Editing JSON with Visual Studio Code settings.json 分类 defaultse ...

  10. 2024.9.23 cj 训练总结

    T1 这道题目仔细观察就会发现: 异或 k=1 这就很好办,考虑 k=1 怎么解 3 1 2 4 5 6 7.......... 即可. 异或,找规律发现有很多数字的异或值为0的.最后的答案是有规律的 ...