第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':'&lt;', '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)forin…:跟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)forin…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>

运行结果

 

posted @ 2020-03-31 17:57  faval  阅读(33)  评论(0)    收藏  举报