Django框架(四):模版标签及模版的继承与引用

一.模版标签

当我们要用Python语句去调用模版变量时就要用到模版标签

当我们在视图函数里面定义一个字典,在模版文件里面用普通的方法引用时会用如下方法

#teacher/view.py

def index(requese):
  students = [
    {'name':'张三','sex':'男','age':'33'},
    {'name':'李四','sex':'男','age':'22'},
    {'name':'王五','sex':'男','age':'25'},
  ]
return render(request,'teacher/index.html',context='{'student':students}')
#templater/teacher/index.html
姓名性别年龄
{{students.0.name}} {{students.0.sex}} {{students.0.age}}
{{students.1.name}} {{students.1.sex}} {{students.1.age}}
{{students.2.name}} {{students.2.sex}} {{students.2.age}}

这样的引用属于硬编码,非常不实用,所以要用到模版标签,可以将上面的代码作如下修改

#templater/teacher/index.html

  {% for student in students%}
  
  {% endif %}
  
姓名性别年龄
{{student.name}} {{student.sex}} {{student.age}}

上面和下面的index.html结果是一样的

常用标签

(1)if/elif/else:可以使用and/or/in/not/==/!=/<=/>=,来进行判断。ifequal/ifnotequal
(2)for…in…:跟python中的for…in…是一样的用法。
forloop.counter:当前迭代的次数,下标从1开始。
forloop.counter0:当前迭代的次数,下标从0开始。
forloop.revcounter:跟forloop.counter一样,下标从大到小。
forloop.revcounter0:跟forloop.counter0一样,下标从大到小。
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:开启和关闭自动转义。

URL反向解析

通常当我们点开一个详情页面的时候,会跳转到另一个URL,这时候会用到模板标签里面的URL反向解析

使用方法:

  1. 先定义好视图函数
def student_detail_view(request,pk):
    students = {
        1:{'name':'李萌','sex':'302','age':'16','hobby':['看书','看电影','骑车']},
        2:{'name':'张杨','sex':'301','age':'80','hobby':['看书','看电影','骑车']},
        3:{'name':'鸣人','sex':'301','age':'18','hobby':['看书','看电影','骑车']}
    }
    if pk in students:
        student = students[pk]
    else:
        student = "没有此人"
    return render(request,'teacher/student_detail.html',context={'student':student})
  1. 简单编辑一个详情页模板



    
    学生详情页


学生详情:{{ student }}


  1. 定义好 URL 路由
from django.urls import path,re_path
from . import views


app_name = 'teacher'

urlpatterns = [
    path('students/',views.students_view),
    path('studentDetail/',views.student_detail_view,name='studentDetail')
]
  1. 在模板文件中加入a标签,用URL模板标签定义a标签的路由
            {% for student in students %}
                
                    {{student.id}}
                    {{student.name}}
                    {{student.sex|convert_male}}
                    {{student.age}}
                    
                        {% show_list student.hobby %}
                    
                

二.模板的继承与引用

1.模板继承

每个不同的页面基本上都有相同的公共的部分,我们可以把这些公共的部分单独拿出来当作基本模板(base),然后在不同的模板中继承这个基本模板

a. 先创建一个base模板



  
    
    
    
    
    {% block title %}这是首页{% endblock %}

    
    

    
    
    
  
  
    {% block content %}

    {% endblock %}
        
    
    
    
    
    
  

上面用到了 block标签, {% block name %} 与 {% endblock %} 之间就是继承基本模板的页面可以根据不同情况改写的内容块
b.继承基本模板

{% extends 'teacher/base.html' %}

只要在模板头部添加一个extends标签,就能继承base.html所有的公共部分,然后在 {% block name %} 与 {% endblock %}中添加自己想要的内容

2.模板引用

当我们需要在一个模板中引入另外一个模板时,比如插入一段广告,我们就会用到模板的引用

模板的引入比较简单,只需要用到include模板标签

    {% block ad %}
        
{% include 'teacher/ad.html' %}
{% endblock %}

includeblock 灵活使用就能做到灵活的插入广告

你可能感兴趣的:(Django框架(四):模版标签及模版的继承与引用)