第4节----Django模板标签
本章节主要介绍怎么使用Django中的模板标签,包含常用的模板标签,模板的继承与应用
一.模板标签
模板标签的规则
{% tag %} 这是模块标签 {%endtag%}
先来看几个列子,这个模板标签到底是怎么使用的????????
student/urls.py
# -*- coding:utf-8 -*- # author: 华五 from django.contrib import admin from django.urls import path from . import views urlpatterns = [ path('admin/', admin.site.urls), path('index/', views.index), path("filter/", views.filter,name='filter'),#此代码只在url跳转用了下 path("tag/<int:pk>/", views.tag, name='tag'), ]
student/views.py
from django.shortcuts import render from django.http import HttpResponse from datetime import datetime
li = [1, 3, 5, 7, 9] dic = {"name": "华五"} class A: def __init__(self,name,id): self.name = name self.id = id def join(self): return (self.id) print(11111111) now = datetime.now() print(now) stu1 = A("华五",123) def index(request): return render(request, "index.html", context={"list": li, "dict": dic, "cla": stu1,"run": stu1 .join()}) def filter(request): return render(request,'student/filter.html',context={'name':'哈哈', 'num1': 1, 'num2': 2, 'li': [1,2,3,4,5], 'default': '123', 'date': now, 'join': 'as123', 'str': 'my name is hauwu', 'tags':'aa.<html> asa.<html>', 'safe':'<', 'float1':3.11111, }) list = [{'name': '华五','age': 22,'come': 'china'}, {'name': '华五1','age': 23,'come': 'us'}, {'name': '华五2', 'age': 24, 'come': 'usa'}] def tag(request,pk): return render(request,'student/tag.html',context={'list': list})
student/templates/student/tag.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {#if/elif/else的使用方法#} {% if list.0.name == '华五' %} <p> 这是 {{ list.0.name}} 的信息 </p> {% elif list.0.name == '华五1' %} <p> 这是 {{ list.1.name}} 的信息 </p> {% else %} <p> 这是 {{ list.2.name}} 的信息 </p> {% endif %} {#for标签的使用#} {% for i in list %} {% if i.name == '华五' %} <p>这是{{ i.name }}的信息</p> {% elif i.name == '华五1' %} <p>这是{{ i.name }}的信息</p> {% else %} <p>这是{{ i.name }}的信息</p> {% endif %} {% endfor %} {#url页面跳转3种方式#} <a href="{% url 'tag' 345 %} ">这是url页面跳转使用</a><br> <a href="{% url 'filter' %} ">这是filter页面跳转使用</a><br> <a href='student/filter/'>这是直接到过渡器页面</a><br> #有点问题不能运行 {#with使用#} <h5>{{ list.1 }} 这是list.1的值</h5> {% with list.1 as f %} <h5>{{ f }} 这是用with复制的list的值</h5> {% endwith %} {#autoescape使用#} <h5>{{ list.2 }}原始标签</h5> <h5>{{ list.2|safe }}过滤器</h5> {% autoescape off %} <h5>{{ list.2 }}autoescape使用</h5> {% endautoescape %}
{#注释标签使用}
{% comment %}
被注释的内容,可以多行注释
{% endcomment %}
</body> </html>
运行结果

常用的标签
(1)if/elif/else:可以使用and/or/in/not/==/!=/<=/>=,来进行判断。ifequal/ifnotequal li = ['x','y','z'] (2)for…in…:跟python中的for…in…是一样的用法。 forloop.counter:当前迭代的次数,下标从1开始。 1,2,3 forloop.counter0:当前迭代的次数,下标从0开始。0,1,2 forloop.revcounter:跟forloop.counter一样,下标从大到小。3,2,1 forloop.revcounter0:跟forloop.counter0一样,下标从大到小。2,1,0 forloop.first:返回bool类型,如果是第一次迭代,返回true,否则返回false。 forloop.last:返回bool类型,如果是最后一次迭代,返回True,否则返回False。 forloop.parentloop:如果发生多层for循环嵌套,那么这个变量返回的是上一层的for (3)for…in…empty…:如果没有数据,跳转到empty中。 (4)load:加载第三方标签。最常用的是{%load static%} (5)url:返回一个命名了的URL的绝对路径。 (6)with:缓存一个变量。 (7)autoescape:开启和关闭自动转义。
二.模板继承与引用
1.继承使用的时候,子类必须添加extends代码: 1.{% extends '继承的父类的html路径l' %},2.若要使用父类的内容则用{{block.super}}
2.引用其他的模板的时候,子类中加include代码:{% include '引用html的文件路径' %}
父类base.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{% block title %} 这是父类模板标题{% endblock %}</title> </head> <body> {% block content %} 这是父类内容 {% endblock %} <br> {% block demo %} 这是父类展示 {% endblock %} </body> </html>
子类demo.html
{#继承base.html#}
{% extends 'student/base.html' %}
{% block title %}
这是继承了base.html的title
{% endblock %}
{% block content %}
这是继承了base.html的{{ block.super }},要使用父类的内容则的用block.super
{% endblock %}
{#引用html#}
{% block demo %}
这是通过include引用的其他模板的内容: {% include 'student/ss.html' %}
{% endblock %}
引用ss.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>标题</title> </head> <body> <p>这是一个被引用的html</p> </body> </html>
运行结果


浙公网安备 33010602011771号