【Python】Django自定义模板过滤器(选择器)

本文介绍了Django中如何自定义模板过滤器,包括simple_tag、inclusion_tag和filter三种类型。通过实例展示了它们的用法,如计算文章总数、生成HTML片段以及处理数据流,帮助理解如何在模板中扩展Django的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

Django内置的过滤器用法:

    {{ 变量名 | 过滤器 }}

虽然Django内置了许多常用的过滤器,但总有些特殊情况需要我们自己定义过滤器,于是Django提供了三大自定义过滤器类型。

分别是:sinple_tag、inclusion_tag、filter

使用自定义过滤器前提,你的app必须已经在settings中注册,如图:

我在article的文件夹下建立自定义过滤器文件,首先必须保证article已经注册过了。


建立一个templatetags文件夹(这个名称不可更改),然后在此文件夹下建一个__init__.py和article_tags.py(这个名称可自定义)文件。其中__init__.py里面可什么也不写,article_tags.py文件用来自定义过滤器逻辑。


simple_tag用来对传送过来的变量进行简单处理

inclusion_tag用来对传送的变量进行HTML标签包裹,返回HTML片段

filter对传送来的数据流进行过滤处理

用法:

from django import template
register = template.Library()

引入template模块,创建register对象,以@方式注册自定义模板函数。图中该函数主要用来查询ArticlePost库的文章总数

@register.simple_tag
def total_articles():
    return ArticlePost.objects.count()

在对应的HTML文件中引用自定义标签:

{% load article_tags %}
<p>这里已经有{% total_articles %}篇文章供您阅读</p>

效果:

inclusion_tag的用法:

inclusion_tag主要用来生成HTML片段插入到原来的节点中,所以一般需要自定义一个视图模板,

数据会经过latest_articles函数处理,处理之后return给article/list/latest_articles.html这个自定义视图渲染。

@register.inclusion_tag('article/list/latest_articles.html')
def latest_articles(n=5):
    latest_articles = ArticlePost.objects.order_by('-created')[:n]
    return {'latest_articles':latest_articles}

 latest_articles.html

{% for article in  latest_articles %}
    <ul>
        <li>
            <a href="{{ article.get_url_path }}">{{ article.title }}</a>
        </li>
    </ul>
{% endfor %}

上图主要是遍历出最新的5篇文章,然后交给视图渲染成超链接的HTML片段。

{% load article_tags %}
<p class="text-center"><h3>最新文章</h3></p>
   {% latest_articles 4 %}

同样进行调用,其中的4是所传参数。

效果:

filter的用法:

其用法与上面差不多,只不过更多的用在数据流中,比如有时候我们想要将markdown格式的文本渲染到HTML页面,而不被HTML给转义。

@register.filter(name='markdown')   # 注册自定义过滤器,命名为markdown
def markdown_filter(text):
    return mark_safe(markdown.markdown(text))       # markdown模块将markdown语法转化为HTML,mark_safe函数将string转化实实在在的字符串,不转义

marrkdown模块是第三方包,需要pip安装,mark_safe()是Django自带的方法,避免html的转义。

filter的name参数用于给自定义的过滤器命名

{% load article_tags %}

{{ article.body | markdown }}

将文章内容转化为markdown格式,并显示在页面上。

效果:

 

有用的话请给点个赞~

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值