ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

模板继承和自定义过滤器

2020-03-29 15:52:13  阅读:227  来源: 互联网

标签:rand 自定义 html endblock 过滤器 模板 block


  小编最近学习了 模板继承和自定义过滤器。

模板继承

  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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有