模板继承和自定义过滤器
作者:互联网
小编最近学习了 模板继承和自定义过滤器。
模板继承
Django模版引擎中最强大也是最复杂的部分就是模版继承了。 模版继承可以让你创建一个基本的“骨架”模版,它包含您站点中的全部元素,并且可以定义能够被子模版覆盖的 blocks 。
base.html 这个作为模板继承页 indexxx.html 在这个模板中实现继承和引用 ss.html 这个作为模板的引用页。
base.html代码如下:作为骨架模板。挖了 三 个坑,content,title,demo。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{% block title %}this title{% endblock %}</title> </head> <body> {% load rand %} {% block content %} This is content {% endblock %}<br> {% block demo %} this is Demo {% endblock %} <br> 哈哈哈哈哈哈啊 {% block ad %} 这是广告 {% endblock %} </body> </html>
indexText.html:
标红的部分处于block之外的。
当我们打开了子模板的路径后,子模板中block包含的东西为覆盖掉父模板中同名block所包含的东西。若父模板中有东西没有被子模板覆盖,如上面父模板中的text。那么父模板中名为text的block的内容将会被继承下来到子模板中显示。
(浏览器 打开之后 并未出现红色部分的内容)可见indexText.html 中非继承block不能显示。
<!DOCTYPE html> <html lang="en"> {% extends 'student/base.html' %} {% block title %} hello world{% endblock %} {% block content %}噜啦啦{{ block.super }} {% endblock %} {% load rand %} <body> {% block demo %}This is indexDemo {% include 'student/ss.html' %}{% endblock %} <br> {% block ad %} index 广告 eeeeee {{ block.super }} {% endblock %} {% block rand %} this is rand function {% endblock %} 大家好!! </body>
自定义过滤器
* 在项目目录下,创建一个名为common的python包
* 将common加到settings文件中的installed_app
* 在common目录templatetags里面创建自定义过滤器和标签文件
* 也可以在app内创建templatetags
templatetags文件夹中存放自定义模板和标签。
如图为 rand.py —— 定义的过滤器
from django.template import Library register = Library() def mycut(value,arg): return value.replace(arg,'') register.filter('mycut',mycut)
将定义的过滤器放到 base.html中:
{% load rand %}
<h1>{{ 'lhgfdaaaafgh' | mycut:'a' }}</h1> <h1>{{ tn | mycut:'a' }}</h1>
用装饰器的方法写自定义的过滤器:
装饰器:
def funa(fun): def funb(a): print(111) print(a) fun() return funb @funa def func(): print(2222) func(333)
输出:
333
2222
funb
在rand.py中注册
@register.filter(name='mylower') def mylower(value): return value.lower()
base.html:
<h1>{{ 'ASSSS' | mylower }}</h1>
文本显示结果
asss
标签:rand,自定义,html,endblock,过滤器,模板,block 来源: https://www.cnblogs.com/a-runner/p/12592688.html