过滤器
语法结构
{{ 数据对象|过滤器名称:参数 }}
过滤器最多只能额外传输一个参数
常见过滤器
标签
注意事项
在django模板语法中写标签的时候,只需要写关键字然后tab键就会自动补全
语法结构
{% 名字 …%}
{% end名字 %}
if判断
{% if 条件1 %}
你好啊
{% elif 条件2 %}
他好呀
{% else %}
大家好
{% endif %}
for循环
提供了 forloop关键字
{% for i in l1 %}
{{ i }}
{% endfor %}
for+if其他使用
{% for i in l1 %}
{% if forloop.first %}
这是第一次循环
{% elif forloop.last %}
这是最后一次循环
{% else %}
中间循环
{% endif %}
{% empty %}
for循环对象为空 自动执行
{% endfor %}
自定义操作
前提操作
- 在应用下需要创建一个名为templatetags的文件夹
- 在该文件夹内创建一个任意名称的py文件
- 在该py文件内需要先提前编写两行固定的代码
from django import template
register = template.Library()
自定义过滤器
只能接收两个参数
@register.filter(is_safe=True)
def index(a, b):
return a + b
{% load mytag %}
{{ n1|index:666 }}
View Code
自定义简单标签
可以接收任意的参数
@register.simple_tag(name='my_tag')
def func1(a, b, c, d):
return a + b + c + d
{% my_tag 1 2 3 4 %} # 参数之间空格隔开即可
自定义inclusion_tag
@register.inclusion_tag('left.html')
def func2(n):
l1 = []
for i in range(1, n + 1):
l1.append(f'第{i}页')
return locals()
{% func2 10 %} # 传入的参数是几就会打印几页
<ul> {% for foo in l1 %} <li>{{ foo }}li> {% endfor %} ul>
该方法需要先作用于一个局部html页面,之后将渲染的结果放到调用的位置
模板导入
概念
类似于将html页面上的局部页面做成模块的形式,哪个地方想要直接导入即可展示
有一个非常好看的获取用户数据的页面,需要在网站的多个页面上使用
- 策略1:拷贝多份即可
- 策略2:模板的导入
使用方式
{% include ‘menu.html’ %}
menu.html只能是一个 局部页面,只能写 局部代码
注释语法
HTML的注释语法
django模板语法的注释
{# #}
注意事项
HTML的注释可以在前端浏览器页面上直接查看到,模板语法的注释 只能在后端查看,前端浏览器查看不了
模板继承
概念
类似于面向对象的继承:继承了某个页面就可以使用该页面上所有的资源
有很多网站的很多页面,其实都是差不多的,只是局部有所变化,模板的继承可以很好的实现该需求
继承步骤
- 先在模板中通过block划定将来可以被修改的区域
{% block content %} <h1>主页内容h1> {% endblock %}
- 子板继承模板
{% extends 'home.html' %}
- 修改划定的区域
{% block content %} <h1>登录内容h1> {% endblock %}
- 子页面还可以重复使用父页面的内容
{{ block.super }}
注意事项
模板上最少应该有三个区域:css区域、内容区域、js区域,子页面就可以有自己独立的css、js、内容
Original: https://www.cnblogs.com/zzs0626/p/16279000.html
Author: 顺溜_7
Title: 模板层
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/582442/
转载文章受原作者版权保护。转载请注明原作者出处!