django 模版标签笔记

一、模板变量笔记:
1、在模版中使用变量,需要将变量放到‘{{}}’中。'{{ 变量 }}'
2、如果想访问对象的属性,可以通过'对象.属性名'的方式访问
3、如果想要访问一个字典的key对应的value,那么只能通过'字典.key'
4、因为在访问字典的'key'时候也用‘.’来访问,因此不能在字典中定义本身就有的属性名当做‘key’,否则字典的那个属性将为编程字典中的key了
5、如果想要访问列表或者元组,那么也是通过‘.’的方式访问,不用通过'[]'的方式访问。

二、前端模板中的for循环
1、'if'标签:if标签相当于‘python’中的if语句,有'elif'和'else'相对应,但是所有的标签都需要用标签符号('{%%}')进行包裹。if标签中可以使用'=='、!=、<、>、<=、>=、in、not in、is、is not'等判断运算符。等判断运算符。
2、'for ... in ...'标签:用法和python中的一样,可以遍历列表、元组、字符串、字典等一切可以遍历的对象。
如果想要反向遍历,那么在遍历的时候加上'reversed'。实例代码:

    {% for student in students%}
        <p>{{ student.name }} </p>
        <p>{{ student.age }} </p
    {% endfor %}

3、遍历字典:实例代码:

{% for key,value in students.items %}
<p>{{key}}:{{value}}</p>
{% endfor %}

4、在for循环中提供了一些参数:
<1> forloop.counter:当前循环的下标。以1作为起始值。
<2> forloop.counter0:当前循环的下标。以0作为起始值。
<3> forloop.revcounter:当前循环的反向下标值。比如列表有10个元素,那么第一次遍历这个属性是等于10,第二次是9,以此类推。并且是以1作为最后一个元素的下标。
<4> forloop.revcounter0:与forloop.revcounter类似,只不过最后一个元素的下标是0.
<5> forloop.first:是否为第一次遍历,适用于针对第一行设置不同时使用。
<6> forloop.last:是否为最后一次遍历,适用于针对最后一行设置不同时使用。
<7> forloop.parentloop:如果有多个循环嵌套,那么这个属性代表的是上一级的for循环。
5、for...in...empty:这个使用跟for...in...一样,其不同之处是,在遍历对象时,如果没有元素的情况下,会执行'empty'中的内容。示例代码:

{% for studet in students %}
    <li>{{ student }}</li>
{% empty %}
    暂时没有学生
{% endfor %}

三、前端模版中使用with标签
在模版中定义变量。有时候一个变量访问的时候比较复杂,那么可以先把这个复杂的变量缓存到一个变量上,以后直接使用这个变量就可以了。

1     context ={
2         'students': ['小明','小溪']
3     }
4     
5     {% with list1=students.1 %}
6         <p>{{ list1 }}</p>
7     {% endwith %}

在使用with标签时需要注意:
1、在with语句中定义的变量,只能在{% with %}{% endwith %}中使用,不能在这个标签外使用。
2、定义变量的时候,不能在等号左右两边留空格。比如{% with list1 = students.1 %}是错误的。
3、还有另外一种写法同样也是支持的:

1         {% with students.1 as list1 %}
2             <p>{{ list1 }}</p>
3         {% endwith %}

四、url标签
   在模版中,我们经常要写一些'url',当我们直接在页面里使用硬编码写死这个'url'时,后期维护起来成本是很高的。这时可以使用url标签。用法类似于django中的'reverse'。

<a href="{% url 'book:list' %}'">图书列表页</a>

  如果需要传递参数到后端时怎么办?这时可以使用位置参数或者关键字参数。记住,两者不能同时使用,且在有多个参数时,使用空格进行分割,不要使用','。

    # path部分
    path('detail/<book_id>/<chapter_id>/', views.book_detail, name='detail')
    
    # 前端使用url反转,使用位置参数
    <a href="{% url 'book:detail' 1 1 %}'">图书详情页</a>
    
    # 前端使用url反转,使用关键字参数
    <a href="{% url 'book:detail' book_id=1 chapter_id=1 %}'">图书详情页</a>

五、spaceless标签:移除HTML标签中的空白字符,包括空格、tab键、换行等。示例代码如下:

1     {% spaceless %}
2         <p>
3             <a href='foo/' >Foo</a>
4         </p>
5     {% endspaceless %}

渲染后:

<p><a href='foo/' >Foo</a></p>

spaceless只会移除html标签之间的空白字符。而不会移除标签与文本之间的空白字符。例如:

    <span>
        不会压缩
    </span>

这时是不会压缩span标签里的。

六、autoescape标签
开启或关闭这个标签内元素的自动转义功能。自动转义是可以将一些特殊字符转义成html语法能识别的字符。比如<会被转义成&lt,而>会被转义成&gt。模版中默认是开启了自动转义的。实例代码如下:

1     # 传递的上下文信息
2     context = {
3         "info": "<a href='www.baidu.com'>百度</a>"
4         }
5     # 模版中关闭自动转义
6     {% autoescape on %}
7         {{ info }}
8     {% endautoescape %}

这时在文中就会显示为百度的超链接。如果将on改为off,则会显示成一个普通字符串。

七、verbatim标签:默认会在前端模版中解析那些特殊字符,比如{%和%}以及{{等等。如果你在某个代码片段中不想使用模版解析引擎,只需将代码放在verbatim标签中即可。

1     {% verbatim %}
2         {{ if }}
3     {% endverbatim %}
posted @ 2019-12-29 14:32  xsan  阅读(378)  评论(0编辑  收藏  举报