Django(2)模板、标签(三)

简介: Django(2)模板、标签(三)

- if/else标签


  • if/else基本语法格式:


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


  • 可以根据条件判断是否输出,并且if/else支持嵌套
  • {% if %}标签接收andornot等关键字对多个变量进行判断,这点和python基础的流程控制是一样的
  • 下面来看案例:


  • 修改index_test.py视图文件


#-*- coding: utf-8 -*-
from django.shortcuts import render
def hello(request):
    test_view = 95
    return render(request,"test.html",{"test":test_view})
  • 修改test.py文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试</title>
</head>
<body>
{%if test > 90 and test <= 100 %}
优秀
{% elif test > 60 and test <= 90 %}
合格
{% else %}
一边玩去~
{% endif %}
</body>
</html>
  • 访问页面


9036bc6d78e94566bff9ad2c702c0a9d.png

- for标签


  • {% for %} 允许我们在一个序列上迭代,与Python中的for循环类似,每一次循环中,模板系统会渲染在{% for %}{% endfor %}之间的所有内容
  • 下面来看案例:


  • 修改index_test.py视图文件
#-*- coding: utf-8 -*-
from django.shortcuts import render
def hello(request):
    test_view = ["aaa","bbb","ccc","ddd","eee"]
    return render(request,"test.html",{"test":test_view})
  • 修改test.py文件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试</title>
</head>
<body>
{% for i in test %}
{{ i }}
{% endfor %}
</body>
</html>
  • 访问页面


8d567e06ea1746e7b7d9da19260c0a5c.png


  • 给标签增加一个reversed可以使列表被反向迭代:


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试</title>
</head>
<body>
{% for i in test reversed %}   #添加reversed
{{ i }}
{% endfor %}
</body>
</html>


  • 访问页面


3a719b7c593f42a08e25e4835bfadbd1.png

for循环也可以遍历字典,使用.items方法,用变量的解包分别获取键和值,下面来修改index_test.py文件

#-*- coding: utf-8 -*-
from django.shortcuts import render
def hello(request):
    test_view = {"name":"测试","age":22}}
    return render(request,"test.html",{"test":test_view})

修改test.html文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试</title>
</head>
<body>
{% for i,j in test.items %}
{{ i }}:{{ j }}
{% endfor %}
</body>
</html>


  • 访问页面



2cb1e079b8754f63aaeb15dad8e36425.png

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

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

下面修改文件:

- index_test.py
#-*- coding: utf-8 -*-
from django.shortcuts import render
def hello(request):
    test_view = ["a","b","c","d","e"]
    return render(request,"test.html",{"test":test_view})
- test.html#依次使用forloop变量
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试</title>
</head>
<body>
{% for i in test %}
{{ forloop.counter }}
{{ forloop.counter0 }}
{{ forloop.revcounter }}
{{ forloop.revcounter0 }}
{{ forloop.first }}
{{ forloop.last }}
{% endfor %}
</body>
</html>

{{ forloop.counter }}


15f4f1294e1a48a7afe9ef5609cbf187.png

{{ forloop.counter0 }}


20966730b3604ea9b516c69868108e57.png


{{ forloop.revcounter }}


42e448930bcd40a1971f3e8e1434d7bd.png


{{ forloop.revcounter0 }}


09c68eedf8054679af5e5a28c0fc52f8.png





{{ forloop.first }}


eae76e8631344565a9c785a0a2f51c32.png



{{ forloop.last }}



01c48ed5eace4ed898af5ac742ae38f2.png

{% empty %}可选从句,在循环为空时执行,也就是in后面的参数布尔值为False时,下面修改文件

- index_test.py
#-*- coding: utf-8 -*-
from django.shortcuts import render
def hello(request):
    test_view = []  #设置列表为空
    return render(request,"test.html",{"test":test_view})
- test.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试</title>
</head>
<body>
{% for i in test %}
{{ forloop.counter0 }}
{% empty %}
{% endfor %}
</body>
</html>

访问页面


8047f11ae5fc452fb5d067a90e69b469.png


- ifequal/ifnotequal标签


  • {% ifequal %}标签可以比较两个值,当比较结果相等时,会显示在{% ifequal %}{% endifequal %}之中所有的值,下面来看案例:


#对比两个模板变量
{% ifequal {{ user }} {{ currentuser }} %}
    <h1>Welcome!</h1>
{% endifequal %}


  • 和 {% if %} 类似, {% ifequal %} 支持可选的 {% else%} 标签:
{% ifequal section 'sitenews' %}
    <h1>Site News</h1>
{% else %}
    <h1>No News Here</h1>
{% endifequal %}


目录
相关文章
|
3月前
|
SQL 前端开发 JavaScript
Python 教程之 Django(10)模板
Python 教程之 Django(10)模板
34 0
|
5月前
|
索引 Python
19 Django模板 - 定义模板
19 Django模板 - 定义模板
16 0
|
5月前
|
Python
18 Django模板 - 介绍
18 Django模板 - 介绍
25 0
|
7月前
|
Python
Django模板加载与响应2
Django模板加载与响应2
39 0
|
1天前
|
开发者 Python
Django模板系统的强大之处:动态渲染与扩展性
【4月更文挑战第15天】Django模板系统是Web开发中的强大工具,支持动态渲染和扩展性。动态渲染包括变量、标签和过滤器的使用,实现内容根据上下文数据动态生成。模板继承和自定义标签则提升了扩展性,减少代码重复,增强可维护性。通过这些特性,Django模板系统助力开发者构建高效、动态的Web应用。
|
3月前
|
前端开发 JavaScript Python
Django 模板中使用 Ajax POST
Django 模板中使用 Ajax POST
16 0
|
4月前
|
前端开发 JavaScript 数据库
Python 教程之 Django(10)模板
Python 教程之 Django(10)模板
37 0
|
5月前
|
Ubuntu Python
23 Django模板 - 验证码案例
23 Django模板 - 验证码案例
31 0
|
5月前
|
安全 JavaScript 前端开发
22 Django模板 - csrf
22 Django模板 - csrf
25 0
|
5月前
|
JavaScript Python
21 Django模板 - HTML转义
21 Django模板 - HTML转义
24 0