ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Django 模板标签(if for 注释 include)

2022-01-28 21:04:25  阅读:129  来源: 互联网

标签:forloop views 标签 list Django mytemp mysite456 include 模板


if/else 标签

基本语法格式如下:

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

或者:

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

根据条件判断是否输出。if/else 支持嵌套。

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

{% if athlete_list and coach_list %}
     athletes 和 coaches 变量都是可用的。
{% endif %}

 

mysite456/mysite456/views.py 文件代码:

from django.shortcuts import render

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

mysite456/templates/mytemp.html 文件代码:

{%if num > 90 and num <= 100 %} 
优秀 
{% elif num > 60 and num <= 90 %}
合格 
{% else %} 
不合格
{% endif %}

再访问访问 http://127.0.0.1:8003/mytemp/,可以看到页面:

 

for 标签

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

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

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

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

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

 

mysite456/mysite456/views.py 文件代码:

from django.shortcuts import render

def mydef(request):
    views_list = ["简单示例demo","简单示例demo1","简单示例demo2","简单示例demo3",]
    return render(request, "mytemp.html", {"views_list": views_list})

mysite456/templates/mytemp.html 文件代码:

{% for i in views_list %} 
{{ i }} 
{% endfor %}
 

再访问访问 http://127.0.0.1:8003/mytemp/,可以看到页面:

 

 

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

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

 

mysite456/templates/mytemp.html 文件代码:

{% for i in views_list reversed%}
{{ i }}
{% endfor %}
再访问访问 http://127.0.0.1:8003/mytemp/,可以看到页面:

 

 

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

 

mysite456/mysite456/views.py 文件代码:

from django.shortcuts import render

def mydef(request):
    views_dict = {"name":"简单示例demo","age":18}
    return render(request, "mytemp.html", {"views_dict": views_dict})

mysite456/templates/mytemp.html 文件代码:

{% for i,j in views_dict.items %} 
{{ i }}---{{ j }} 
{% endfor %}

 

再访问访问 http://127.0.0.1:8003/mytemp/,可以看到页面:

 

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

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

 

mysite456/mysite456/views.py 文件代码:

from django.shortcuts import render

def mydef(request):
     views_list = ["a", "b", "c", "d", "e"]
     return render(request, "mytemp.html", {"listvar": views_list})

mysite456/templates/mytemp.html 文件代码:

{% for i in listvar %} 
{{ forloop.counter }}
 {{ forloop.counter0 }}
 {{ forloop.revcounter }}
 {{ forloop.revcounter0 }} 
{{ forloop.first }} 
{{ forloop.last }} 
{% endfor %}
 

再访问访问 http://127.0.0.1:8003/mytemp/,可以看到页面:

 

 

{% empty %}

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

 

mysite456/mysite456/views.py 文件代码:

from django.shortcuts import render

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

 

mysite456/templates/mytemp.html 文件代码:

{% for i in listvar %}
{{ forloop.counter0 }} 
{% empty %} Hello
{% endfor %}

 

再访问访问 http://127.0.0.1:8003/mytemp/,可以看到页面:

 

 

可以嵌套使用 {% for %} 标签:

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

ifequal/ifnotequal 标签

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

下面的例子比较两个模板变量 user 和 currentuser :

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

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

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

注释标签

Django 注释使用 {# #}。

{# 这是一个注释 #}

include 标签

{% include %} 标签允许在模板中包含其它的模板的内容。

下面这个例子都包含了 top.html 模板:

{% include "top.html" %}

csrf_token

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

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

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

解析:

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

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

 

REF

https://www.runoob.com/django/django-template.html

标签:forloop,views,标签,list,Django,mytemp,mysite456,include,模板
来源: https://www.cnblogs.com/emanlee/p/15853740.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有