django开发系列:常用模板标签

django开发系列:常用模板标签

本文涉及标签:if,for,with,url,

if语句:

  1. 所有的标签都是在{%%}之间。
  2. if标签有闭合标签。就是{% endif %}
  3. if标签的判断运算符,就跟python中的判断运算符是一样的。==、!=、<、<=、>、>=、in、not in、is、is not这些都可以使用。
  4. 还可以使用elif以及else等标签。
views.py代码:
from django.shortcuts import render

def index(request):
    context = {
        'age': 20
    }
    return render(request ,'index.html',context=context)
    
index.html代码:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    {% if age < 18 %}#}
        <p>您是未成年人,不能进入网吧</p>
    {% elif age == 18 %}
        <p>您是满了18岁,可以进入网吧</p>
    {% else %}
        <p>您已经是成年人了,要承担起家庭的责任了,也不能进入网吧</p>
    {% endif %}
</body>
</html>

for...in...标签:

for...in...类似于Python中的for...in...。可以遍历列表、元组、字符串、字典等一切可以遍历的对象。示例代码如下:

views.py代码:
from django.shortcuts import render

def index(request):
    context = {
        'books':[ 
            {
                'name': '三国演义',
                'author': '罗贯中',
                'price': 199
            },
            {
                'name': '水浒传',
                'author': '施耐庵',
                'price': 109
            },
            {
                'name': '西游记',
                'author': '吴承恩',
                'price': 99
            },
            {
                'name': '红楼梦',
                'author': '曹雪芹',
                'price': 100
            }
        ],
        
        'person':{
            'username': 'zhiliao',
            'age': 18,
            'height': 180
        },
        'comments': [
        ]
    }
    return render(request,'index.html',context=context)

index.html关键代码:
{% for book in books%}
<p>{{ book.name }}</p>
{% endfor %}

如果想要反向遍历,那么在遍历的时候就加上一个reversed。示例代码如下:

{% for book in books reversed %}
<p>{{ book.name }}</p>
{% endfor %}

遍历字典的时候,需要使用itemskeysvalues等方法。在DTL中,执行一个方法不能使用圆括号的形式。遍历字典示例代码如下:

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

for循环中,DTL提供了一些变量可供使用。这些变量如下:

  • forloop.counter:当前循环的下标。以1作为起始值。
  • forloop.counter0:当前循环的下标。以0作为起始值。
  • forloop.revcounter:当前循环的反向下标值。比如列表有5个元素,那么第一次遍历这个属性是等于5,第二次是4,以此类推。并且是以1作为最后一个元素的下标。
  • forloop.revcounter0:类似于forloop.revcounter。不同的是最后一个元素的下标是从0开始。
  • forloop.first:是否是第一次遍历。
  • forloop.last:是否是最后一次遍历。
  • forloop.parentloop:如果有多个循环嵌套,那么这个属性代表的是上一级的for循环。

** 模板中的for…in…没有continue和break语句,这一点和Python中有很大的不同,一定要记清楚! **

for...in...empty标签:

这个标签使用跟for...in...是一样的,只不过是在遍历的对象如果没有元素的情况下,会执行empty中的内容。示例代码如下:

{% for person in persons %}
<li>{{ person }}</li>
{% empty %}
暂时还没有任何人
{% endfor %}

with标签:

  1. 在模板中,想要定义变量,可以通过with语句来实现。
  2. with语句有两种使用方式,第一种是with xx=xxx的形式,第二种是with xxx as xxx的形式。
  3. 定义的变量只能在with语句块中使用,在with语句块外面使用取不到这个变量。
    示例代码如下:
{% with zs=persons.0%}
    <p>{{ zs }}</p>
    <p>{{ zs }}</p>
{% endwith %}
下面这个因为超过了with语句块,因此不能使用
<p>{{ zs }}</p>

{% with persons.0 as zs %}
    <p>{{ zs }}</p>
{% endwith %}

url标签:

url标签:在模版中,我们经常要写一些url,比如某个a标签中需要定义href属性。当然如果通过硬编码的方式直接将这个url写死在里面也是可以的。但是这样对于以后项目维护可能不是一件好事。因此建议使用这种反转的方式来实现,类似于django中的reverse一样。示例代码如下:

urls.py代码:
from django.urls import path
from . import views

urlpatterns = [
    path('', views.index,name='index'),
    path('list/', views.book,name='list'),
]

html模板代码:
<a href="{% url 'book:list' %}">图书列表页面</a>

如果url反转的时候需要传递参数,那么可以在后面传递。但是参数分位置参数和关键字参数。位置参数和关键字参数不能同时使用。示例代码如下:

# path部分
path('detail/<book_id>/',views.book_detail,name='detail')

# url反转,使用位置参数
<a href="{% url 'book:detail' 1 %}">图书详情页面</a>

# url反转,使用关键字参数
<a href="{% url 'book:detail' book_id=1 %}">图书详情页面</a>

如果想要在使用url标签反转的时候要传递查询字符串的参数,那么必须要手动在在后面添加。示例代码如下:

<a href="{% url 'book:detail' book_id=1 %}?page=1">图书详情页面</a>

如果需要传递多个参数,那么通过空格的方式进行分隔。示例代码如下:

<a href="{% url 'book:detail' book_id=1 page=2 %}">图书详情页面</a>

autoescape自动转义:

  1. DTL中默认已经开启了自动转义。会将那些特殊字符进行转义。比如会将<转义成&lt;等。
  2. 如果你不知道自己在干什么,那么最好是使用DTL的自动转义。这样网站才不容易出现XSS漏洞。
  3. 如果变量确实是可信任的。那么可以使用autoescape标签来关掉自动转义。示例代码如下:
views.py代码:
from django.shortcuts import render

def index(request):
    context = {
        'info': "<a href='http://www.baidu.com'>百度</a>"
    }
    return render(request,'index.html',context=context)

html中代码:
{% autoescape off %}
    {{ info }}
{% endautoescape %}

最终显示:百度

verbatim标签笔记:

verbatim标签:默认在DTL模板中是会去解析那些特殊字符的。比如{%%}以及{{等。如果你在某个代码片段中不想使用DTL的解析引擎。那么你可以把这个代码片段放在verbatim标签中。示例代码下:

{% verbatim %}
	{{if dying}}Still alive.{{/if}}
{% endverbatim %}
显示:{{if dying}}Still alive.{{/if}}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值