模板语法之 代码复用
深度查询语法 解决变量的变形问题
逻辑语法 解决的容器元素的遍历取出的问题
以上两种解决了在一个页面的代码问题,多个标签如果想在不同的页面中去使用,该如何处理,
现在解决代码复用的问题
1、 传统模板分离 include 嵌入模板
把公共的标签,独立出来,任意页面使用的时候,使用include 嵌入,方便,缺点是过于碎片化
在模板文件内引入
{% include 'appo1/adver.html' %}
# 标签的格式 样式+标签主体 ,注意样式的名称不要和模板内的样式名称重名
<style>
.adver {
width: 100px;
height: 80px;
background-color: rosybrown;
position: fixed;
bottom: 10px;
right: 10px;
}
</style>
<div class="adver">广告</div>
![image-20230323103714617]()
2、 继承模板
多个标签如果想在不同的页面中去使用,该如何处理,利用模板的继承
base.html
# 添加一个黑盒子,引用的文件替换内容的地方
{% block base %}
<p>hell</p>
默认数据
{% endblock base %}
{% extends 'appo1/base.html' %}
# 继承模板文件
{% block base %} # 替换黑盒子的语法,模板盒子的默认内容替换成自己的。
<div>
<ul>
{% for order in order_list %}
<li>{{ order }}</li>
{% endfor %}
</ul>
</div>
{% endblock %}
数据模板就可以解决代码重复的问题。在模板文件中只需要处理当前页面独有的数据。
1、继承extends ,要在主体页面的第一行,
2、block要设置默认值,需要改的,在继承页面 重新赋值即可,不修改的继承默认值
3、在模板文件中 黑盒的endblock 添加盒子的名称,显示更加的友好,
4、include 和 block一样不能设置名称的重名
{% extends 'appo1/base.html' %}
{% block base %}
{{ block.super }} #5、子标签显示父类的默认标签,也就是 子类重用父类方法,从父类的属性找到标签,显示
<div>
<ul>
{% for order in order_list %}
<li>{{ order }}</li>
{% endfor %}
</ul>
</div>
{% endblock %}
路由的反向解析
路由分发
urlpatterns = [
path('index', views.index),
path('order', views.order)
]
html文件
<li><a href="http://127.0.0.1:8000/index">首页</a></li>
<li><a href="http://127.0.0.1:8000/order">订单页面</a></li>
1,在页面填写的a标签链接,是直接写死的ip、端口,路径。游览器页面的请求的优化,可以写绝对路径或者相对路径,简写成"/order",
<li><a href="/index">首页</a></li>
<li><a href="/order">订单页面</a></li>
2 随着业务和功能的不断扩张,order这个路径的名称需要更改,但是所有的页面中写死了路径名称,
那么就需要在当前路径下设置一个反向解析的名字,也就是别名的概念,所有的页面中要跳转某一个路径的话,获取别名,通过别名获取到真正的路径名称,这样路径的名称可以任意更改,已达到正常解析的目的。
3、如果路径中使用正则的匹配,要加上能匹配上数值,正确的跳转。
urlpatterns = [
path('index', views.index,name='shouye'),
path('order', views.order,name = 'dingdan')
]
可以通过 IP 域名 web服务三者的关系进行理解。 访问www.baidu.com 就是访问
模板文件中使用
![image-20230323164346197]()
![image-20230323164311105]()
视图层使用
当登录页面需要用到重定向的时候,找到的路径名称也有可以变化,也需要获取最新的路径名称。,
在urls中设置别名,然后在视图上通过reverse 获取到别名所代表的目录。在redirect 重定向到目录 。
path('index', views.index, name='shouye'),
def login(request):
from django.urls import reverse
path = reverse('shouye')
return redirect(path)