0
点赞
收藏
分享

微信扫一扫

模板继承

              模板继承是通过模板标签来实现的,其作用是将多个模板文件的共同代码集中在一个新的模板文件中,然后各个模板可以直接调用新的模板文件,从而生成HTML网页,这样可以减少模板之间重复的代码

                                     模板继承_html


https://docs.djangoproject.com/zh-hans/4.2/howto/custom-template-tags/

我们并未限制放入{% load %} 语句会加载名字指定 Python 模块的 tags/filters,而不是应用。

要成为一个可用的DjangoTemplates 的 'libraries' 参数注册。这在加载模板名字时,想为模板标签起个别名时很有用。这也让你能在未安装应用的情况下注册标签。

编写自定义的模板过滤器

自定义的过滤器就是一些有一到两个参数的

1.(输入的)变量的值,不一定得是字符串类型

2. 而参数的值,它们可以有一个默认值,或者被排除在外

举个例子,在过滤器

因为模板语言不提供异常处理机制,所以任何从模板过滤器中抛出的异常都将被视为服务器异常。因此,如果有一个合理的返回值将要被返回的话,过滤器函数应当避免产生异常。万一模板中出现有明显错误的输入,产生异常也仍然比隐藏这个

自动转义的注意事项

模板标签的输出simple_tag() 之外)。不过,在编写模板标签时,你仍需牢记几点。

若模板标签的

同理,如果你的模板标签为某些子渲染进程创建了新的上下文,那么就需要将当前上下文对应的自动转义属性传入。

注册该标签

最后,用你的模块的

tag 方法接收两个参数:

模板标签的名字——一个字符串。若为空,将会使用编译函数的名字。

编辑函数——一个 Python 函数(不是函数名的字符串)

传递模板变量给标签

虽然你能利用

                                     模板继承_Python_02


上述代码是一个完整的模板文件,一个完整的模板通常有<head>和<body>两部分,而每个模板的<head>和<body>的内容都会有所不同,因此除了这两部分的内容之外,可以将其他内容写在共用模板文件里

base.html的代码中看到,<title>写在模板标签{% block title %}{% endblock %}里面,而<body>里的内容改为{% block body %}{% endblock %}。block标签是为其他模板文件调用时提供内容重写的接口,body是对这个接口进行命名。在一个模板中可以添加多个block标签,只要每个block标签的命名不相同即可。接着在模板index.html中调用共用模板base.html


                                     模板继承_Python_03


模板index.html调用共用模板base.html的实质是由模板继承实现的,调用步骤如下:●在模板index.html中使用{% extends "base.html" %}来继承模板base.html的所有代码。

●通过使用标签{% block title %}或{% block body %}来重写模板base.html的网页内容。

●如果没有使用标签block重写共用模板的内容,网页内容将就由共用模板提供。比如模板index.html没有使用标签{% block title %}重新定义<title>,那么网页标题内容应由模板base.html设置的<title>提供。

●标签block必须使用{% endblock %}结束block标签。从模板index.html看到,模板继承与Python的类继承原理是一致的,通过继承方式使其具有父类的功能和属性,同时也可以通过重写来实现复杂多变的开发需求。为了验证模板继承是否正确,运行MyDjango并访问127.0.0.1:8000,查看网页标题(标题由模板base.html的<title>提供)和网页信息(重写模板base.html的{%block body %})


                                     模板继承_字符串_04


举报

相关推荐

0 条评论