欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

django 模版标签笔记

程序员文章站 2023-08-30 22:03:20
一、模板变量笔记:1、在模版中使用变量,需要将变量放到‘{{}}’中。'{{ 变量 }}'2、如果想访问对象的属性,可以通过'对象.属性名'的方式访问3、如果想要访问一个字典的key对应的value,那么只能通过'字典.key'4、因为在访问字典的'key'时候也用‘.’来访问,因此不能在字典中定义 ......

一、模板变量笔记:
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 %}