四.模板标签
1.常用标签
1.1标签语法
标签在渲染的过程中提供任意的逻辑标签在渲染的过程中提供任意的逻辑
标签语法: 由%}和 {% 来定义的,例如:{%tag%} {%endtag%}
这个定义是刻意模糊的。 例如,一个标签可以输出内容,作为控制结构,例如“if”语句或“for”循环从数据库中提取内容,甚至可以访问其他的模板标签。
1.2与HTML的标签区别
HTML的标签和这标签的区别
<>前端固定显示的内容 {%%}后端写的逻辑
在传值判断时
- {%%}时控制流程,可以取值进行判断,变相实现了{{}}作用
- {{}}是取出变量
1.3常用标签
例1:if的例子
例2: for的例子
例3:url页面转换的例子
注: {% %} ------------ 在{ 与%之间不能有空格
1.3例 建立新的子应用实现标签用法
1.在Ubantu进入项目环境WDjangoLook,创建新的子应用book
- workon 查看所有的虚拟环境
- workon 虚拟环境名 运行虚拟环境
- ls 查看所有文档
- cd 进入文档
- python manage.py startapp name 创建子应用
2.在PyCharm中下载新建的子项目
3.在项目文件的settings.py文件中的INSTALLED_APPS[] 中注册look子应用
4.为look子应用建立urls.py文件导入库
5.在项目文件的urls.py下urlpatterns注册look子应用的路由
6.在look子项目下的views文件中导入库
7.建立标签测试模板
8.在look子应用的views.py中设置显示函数,并调用标签测试模板,传入参数
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def TagTest(request):
ls = [1,2,3]
name = '小明'
context = {
'name':name,
'ls':ls
}
return render(request,'标签测试模板.html',context)
def Tagindex01 (request):
return HttpResponse('通过显示函数URL进入页面')
def Tagindex02 (request):
return HttpResponse('通过显示函数name进入页面')
9.在look子应用的urls.py文件为显示函数设置路由
from django.urls import path,re_path
from .import views
urlpatterns = [
path('TagTest/', views.TagTest, name = 'Test'),
path('Tagindex01', views.Tagindex01, name = 'index01'),
path('Tagindex02', views.Tagindex02, name = 'index02')
]
10.在标签测试模板中写标签,实现前后端交互
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
* {
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<!--if 标签测试 -->
{% if name == '大明' %}
这里是大明
{% elif name == '小明' %}
这里是小明
{% else %}
这里是{{name}}
{% endif %}
<!--for 标签测试 -->
{% for i in ls %}
{% if forloop.counter0 == 1 %}
<li>这是第索引为1的值{{i}}</li>
{% else %}
<li>{{i}}</li>
{% endif %}
{% endfor %}
<!--url 标签测试 -->
<a href ="/Tagindex01">到达Tagindex01的界面</a><br>
<a href ="{% url 'index02' %}">到达Tagindex02的界面</a><br>
</body>
</html>
运行结果:
2.模板的继承
Django模版引擎中最强大也是最复杂的部分就是模版继承了。 模版继承可以让你创建一个基本的“骨架”模版,它包含您站点中的全部元素,并且可以定义能够被子模版覆盖的 blocks 。
模板的继承,主要的作用就是实现模板内html代码的重复利用,方便维护和修改,比如一个网站每个网页的页头和页脚信息固定,这样就不需要在每个html页面加入页头和页尾代码,只需要在一个html文件中创建一个模板,其他html页面直接引用即可
2.1模板继承的extend的用法
模板继承使用extends标签实现。通过使用block来给子模板开放接口。
1、extends必须是模板中的第一个出现的标签。
2、子模板中的所有内容,必须出现在父模板定义好的block中,否则django将不会渲染。
3、如果出现重复代码,就应该考虑使用模板。
4、尽可能多的定义block,方便子模板实现更细的需求。
5、如果在某个block中,要使用父模板的内容,使用block.super获取。
2.2 模板继承的例子
参考文章(1条消息) django之模板继承_zhouxuan623的专栏-CSDN博客_django模板继承
1创建三个模板文件,base.html,indexxx.html,ss.html
-
base.html 这个作为模板继承页(常用的格式的模板)
-
indexxx.html 在这个模板中实现继承和引用(我们看到的模板,可以通过继承来继承不经常改变的东西,引用到下一模板)
-
ss.html 这个作为模板的引用页(可以跳到这个模板)
2.base.html中的内容
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %}这里是默认的标题来base{% endblock %}</title>
<style>
* {
margin: 0;
padding: 0;
}
</style>
</head>
<body>
{% block context %}
这里是默认的内容来自base
{% endblock %}
<br>
{% block demo %}
这里是默认演示base
{% endblock %}
</body>
</html>
2.ss.html中的内容
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>内容</title>
<style>
* {
margin: 0;
padding: 0;
}
</style>
</head>
<body>
欢迎跳转,这里是ss界面
</body>
</html>
3.indexxx.html中的内容
访问的模板内容为template模板文件下的base模板
{% extends 'base.html'%}
{%block title %} music 主页 {% endblock %}
{%block content %}
这句是来自父类的:{{block.super}}<br>
这是子模板自己的内容:没写block就不会显示
<li>vvv<li>
{% endblock %}
{% block demo %}
这是通过include引用的其他模板的内容:{%include 'ss.html' %}
{% endblock %}
4.配置显示函数 在look子应用的views中
def indexxx(requst):
return render(requst,'indexxx.html')
5.配置路由 在look子应用的urls中设置路由
urlpatterns = [
path('TagTest/', views.TagTest, name = 'Test'),
path('Tagindex01/', views.Tagindex01, name = 'index01'),
path('Tagindex02/', views.Tagindex02, name = 'index02'),
path('test_indexxx/',views.indexxx)
]
6.运行结果