31.Django自定义模版

栏目: Python · 发布时间: 5年前

内容简介:Django自定义模版tag在使用模版的时候用到在app目录下面创建一个

Django自定义模版tag

在使用模版的时候用到 {% load static %} 等一系列的 工具 标签,实际上我们也可以自定义这个 标签。

在app目录下面创建一个 templatetags 目录,必须是这个名字,然后创建一个文件 sitetags.py 可以根据自己需求取名 31.Django自定义模版

1.simple_tag()

sitetags.py

from django import template

register = template.Library()


@register.simple_tag
def slide():
    return '这是自定义标签'

此处省略了,view和url的编写

index.html

<!DOCTYPE html>
# 加载标签 名字就是我们在templatetags下新建的
{% load sitetags %}
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

# 使用模版,是我们等一的方法
{% slide %}
</body>
</html>

31.Django自定义模版

增加参数:

上面我们是写死了结果,这样灵活性严重不足,如果需要修改下文案就无法达到复用的作用了。

修改slide()

@register.simple_tag
def slide(text):
    return text

修改index.html

<!DOCTYPE html>
{% load sitetags %}
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

{% slide '这是带参数的标签'%}
</body>
</html>

刷新浏览器我们将会看到:

这是带参数的标签

获取上下文参数:

上面我们修改成了动态显示内容,那么有时候想要获取整个模版的信息怎么办呢,莫慌,Django已经想到了

再次修改sitetags.py

# 开启上下文,如果设置为True第一个参数必须为context,名字也是固定写法
@register.simple_tag(takes_context=True)
def slide(context, text):
    print(context) # 输出
    return text

可以看到一些请求上下文的封装

[{'True': True, 'False': False, 'None': None}, 
{'csrf_token': <SimpleLazyObject: <function csrf.<locals>._get_val at 0x10f625f28>>, 
'request': <WSGIRequest: GET '/'>, 
'user': <SimpleLazyObject: <function AuthenticationMiddleware.process_request.<locals>.<lambda> at 0x10f625e18>>,
 'perms': <django.contrib.auth.context_processors.PermWrapper object at 0x10f666fd0>, 'messages': <django.contrib.messages.storage.fallback.FallbackStorage object at 0x10f622978>, 
 'DEFAULT_MESSAGE_LEVELS': {'DEBUG': 10, 'INFO': 20, 'SUCCESS': 25, 'WARNING': 30, 'ERROR': 40}}, {}]

给标签取一个名字

在模版中我们使用 slide 作为标签名称,这是Django的默认行为:

如果没有单独设置名字就取函数名称.

@register.simple_tag(takes_context=True, name='mytag')
def slide(context, text):
    return text

模版中需要使用 mytag

{% mytag '这是带参数的标签'%}

安全:

为了放置XSS漏洞,Django默认开启了输出转义,比如里面包含html标签输出就是字符串的html标签。 比如:

123

就是远洋输出。

如果希望不按原样输出可以使用 from django.utils.safestring import mark_safe mark_safe() 处理,但是务必确保没有安全问题

如果包含html片段使用 from django.utils.html import format_html format_html()

2.inclusion_tag()

现在都流行组件化开发,实际上django的模版标签就是类似的东西,我们可以将部分功能封装成 标签模版供其他地方使用

修改sitetags.py

@register.inclusion_tag('messages.html')
def messages():
    return {
        'messages': [
            '今天有雨,请带伞出行',
            '雨天出行注意安全',
            '下雨也不要忘了来第八个部落学习',
        ]
    }

在templates目录下创建 messages.html

<ul>
    {% for message in messages %}
        <li>{{ message }}</li>
    {% endfor %}
</ul>

31.Django自定义模版 其他带参数数和context用法同simple_tag,不再赘述。

不使用装饰器注册的方式:

from django.template.loader import get_template
t = get_template('messages.html')
register.inclusion_tag(t)(messages)

以上所述就是小编给大家介绍的《31.Django自定义模版》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

大数据系统构建

大数据系统构建

Nathan Marz、James Warren / 马延辉、向磊、魏东琦 / 机械工业出版社 / 2017-1 / 79.00

随着社交网络、网络分析和智能型电子商务的兴起,传统的数据库系统显然已无法满足海量数据的管理需求。 作为一种新的处理模式,大数据系统应运而生,它使用多台机器并行工作,能够对海量数据进行存储、处理、分析,进而帮助用户从中提取对优化流程、实现高增长率的有用信息,做更为精准有效的决策。 但不可忽略的是,它也引入了大多数开发者并不熟悉的、困扰传统架构的复杂性问题。 本书将教你充分利用集群硬件优势的La......一起来看看 《大数据系统构建》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试