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自定义模版》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

影响力

影响力

[美] 罗伯特·西奥迪尼 / 陈叙 / 中国人民大学出版社 / 2006-5 / 45.00元

政治家运用影响力来赢得选举,商人运用影响力来兜售商品,推销员运用影响力诱惑你乖乖地把金钱捧上。即使你的朋友和家人,不知不觉之间,也会把影响力用到你的身上。但到底是为什么,当一个要求用不同的方式提出来时,你的反应就会从负面抵抗变成积极合作呢? 在这本书中,心理学家罗伯特·B·西奥迪尼博士为我们解释了为什么有些人极具说服力,而我们总是容易上当受骗。隐藏在冲动地顺从他人行为背后的6大心理秘笈,正是......一起来看看 《影响力》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具