Django入门(七)模板标签- if for 注释 include

1. if/else 标签 

基本语法格式如下:

{% if condition %}
     ... display
{% endif %}

或者:

{% if condition1 %}
   ... display 1
{% elif condition2 %}
   ... display 2
{% else %}
   ... display 3
{% endif %}

特点:

1. 与python不同的是,结束if需要有endif标签,if后面没有冒号:

2. 同时也支持嵌套

3. {% if condition %} 标签接受 and , or 或者 not 关键字来对多个变量做判断 或者对变量取反,例如:

{% if alist and blist %}
     a 和 b 变量都是可用的。
{% endif %}

代码举例:

1. 在views.py中输入:

from django.shortcuts import render

def mydef(request):
    
    views_num = 80
    return render(request, "mytemp.html", {"num": views_num})

2. 在mytemp.html中输入:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>if/else演示</h1>
{%if num > 90 and num <= 100 %}
优秀
{% elif num > 60 and num <= 90 %}
合格
{% else %}
不合格
{% endif %}

</body>
</html>

3. 代码执行结果:成功!

2. for 标签

2.1 for 遍历列表,正向迭代

{% for %} 允许我们在一个序列上循环遍历。

与 Python 的 for 语句的情形类似,循环语法是 for X in Y ,Y 是要迭代的序列而 X 是在每一个特定的循环中使用的变量名称。

每一次循环中,模板系统会渲染在 {% for %} 和 {% endfor %} 之间的所有内容。

代码举例:

1. 在views.py中输入:

from django.shortcuts import render

def mydef(request):

    views_list = ["演示demo1","演示demo2","演示demo3","演示demo4"]
    return render(request, "mytemp.html", {"num": views_list})

2. 在mytemp.html中输入:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>if/else演示</h1>
    <ul>
    {%for i in num%}
        <li>{{i}} </li>>
    {% endfor %}
    </ul>>
</body>
</html>

3. 代码执行结果:成功!

2.2 for 遍历列表,反向迭代

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


    <ul>
    {%for i in num reversed%}
        <li>{{i}} </li>>
    {% endfor %}
    </ul>>

2. 结果如下图:成功!

 2.3 forloop 变量

在 {% for %} 标签里可以通过 {{forloop}} 变量获取循环序号。

  • forloop.counter: 顺序获取循环序号,从 1 开始计算
  • forloop.counter0: 顺序获取循环序号,从 0 开始计算
  • forloop.revcounter: 倒序获取循环序号,结尾序号为 1
  • forloop.revcounter0: 倒序获取循环序号,结尾序号为 0
  • forloop.first(一般配合if标签使用): 第一条数据返回 True,其他数据返回 False
  • forloop.last(一般配合if标签使用): 最后一条数据返回 True,其他数据返回 False

举一个例子如下:

很简单,容易理解,不再赘述了 

<body>
    <h1>if/else演示</h1>
    <ul>
    {%for i in num %}
        {{forloop.counter0}}
    {% endfor %}
    </ul>>
</body>

2.4 for循环遍历字典

可以直接用字典 .items 方法,用变量的解包分别获取键和值。 

代码举例:

1. 在views.py中输入:

from django.shortcuts import render

def mydef(request):
    
    views_list = {"name":"演示demo1","age":"18"}
    return render(request, "mytemp.html", {"num": views_list})

2. 在mytemp.html中输入:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>if/else演示</h1>
    <ul>
    {%for i,j in num.items %}
        <li>{{i}} ----{{j}}</li>>
    {% endfor %}
    </ul>
</body>
</html>

3. 代码执行结果:成功!

2.5 {% empty %}语句

 可选的 {% empty %} 从句:在循环为空的时候执行(即 in 后面的参数布尔值为 False )。

 代码举例:

1. 在views.py中输入:

from django.shortcuts import render

def mydef(request):
    views_list = []
    return render(request, "mytemp.html", {"num": views_list})

2. 在mytemp.html中输入:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
       <h1>if/else演示</h1>
    <ul>
    {%for i in num %}
        {{forloop.counter0}}
        {%empty%}
        数据为空
    {% endfor %}
    </ul>>
</body>
</html>

3. 代码执行结果:成功!

3. ifequal/ifnotequal 标签 

{% ifequal %} 标签作用是 比较两个值,当他们相等时,显示:在 {% ifequal %} 和 {% endifequal %} 之中所有的值,格式如下:

{% ifequal lista listb %}
    <h1>Welcome!</h1>
{% endifequal %}

  {% ifequal %} 支持 {% else%} 标签,格式如下:

{% ifequal lista listb %}
    <h1>Welcome!</h1>
{%else%}
    <h1>Game over!</h1>
{% endifequal %}

4. 注释标签 

注释使用 {# #},格式如下:

{# 这里写注释的代码 #}

5.include 标签

{% include %} 标签允许在模板中包含其它的模板的内容,格式如如下:

{% include "yourtemp.html" %}

6. csrf_token

csrf_token 用于form表单中,作用是跨站请求伪造保护。

如果不用{% csrf_token %}标签,在用 form 表单时,要再次跳转页面会报403权限错误。

用了{% csrf_token %}标签,在 form 表单提交数据时,才会成功。

原理解析:

首先,向服务器发送请求,获取登录页面,此时中间件 csrf 会自动生成一个隐藏input标签,该标签里的 value 属性的值是一个随机的字符串,用户获取到登录页面的同时也获取到了这个隐藏的input标签。

然后,等用户需要用到form表单提交数据的时候,会携带这个 input 标签一起提交给中间件 csrf,原因是 form 表单提交数据时,会包括所有的 input 标签,中间件 csrf 接收到数据时,会判断,这个随机字符串是不是第一次它发给用户的那个,如果是,则数据提交成功,如果不是,则返回403权限错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Django和Vue中,v-for和v-if是用于在Vue模板中进行循环和条件渲染的指令。 在Django中,通过Django模板语言(DTL)将数据传递给Vue模板。通过在Django视图中设置一个返回JSON数据的路由,例如mysite.views中的test函数,使用JsonResponse返回数据。然后在Vue项目中使用v-for指令循环遍历该数据并渲染到页面上。例如可以使用v-for指令遍历一个列表,并在模板中显示每个项目的内容。 在Vue中,使用v-bind指令可以动态绑定属性值,例如v-bind:href可以绑定一个动态的URL路径。在引用中的代码示例中,v-bind:href绑定了一个动态的URL路径,其中包括art.uid和num参数。这样可以根据数据的不同生成不同的URL路径。 此外,v-if是Vue的条件渲染指令,可以根据条件来决定是否渲染某个元素。在引用中的代码示例中,v-if可以在Vue实例的created函数中使用,根据条件来决定是否渲染某个元素。 综上所述,在Django和Vue中,v-for和v-if都是用于在Vue模板中进行循环和条件渲染的指令,可以根据数据的不同生成不同的内容,并根据条件来决定是否渲染某个元素。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [vue-cli+Django](https://blog.csdn.net/weixin_42929804/article/details/111315930)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [vue配合django接口,v-for循环的时候显示不了数据](https://blog.csdn.net/weixin_45154837/article/details/99541658)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DOT Manager

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值