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

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

 

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格式,并显示在页面上。

效果:

 

有用的话请给点个赞~

 

内容概要:本文介绍了“快速LDP-MST”这一针对大型数据集的高效基于密度峰值的聚类方法,并提供了完整的Matlab代码实现。该方法通过构建最小生成树(MST)并融合密度峰值聚类思想,有效提升了传统算法在处理大规模、复杂分布数据时的聚类效率与准确性,尤其适用于高维与非球形簇结构的数据分析任务。文章不仅阐述了算法的核心原理与技术优势,还强调了科研过程中逻辑思维、创新意识与“借力”工具的重要性,倡导研究者善用现有资源加速科研进程。; 适合人群:具备一定编程基础,特别是熟悉Matlab语言,从事数据科学、机器学习、模式识别或相关领域的科研人员、工程师及研究生;尤其适合正在开展聚类算法研究或需要高效处理大规模数据的开发者。; 使用场景及目标:①在大规模数据集中实现高效、精确的聚类分析;②研究基于密度与图论结合的聚类算法设计原理与优化路径;③通过提供的Matlab代码快速搭建实验环境,验证算法性能,或在此基础上进行二次开发与算法改进。; 阅读建议:此资源以Matlab代码为核心支撑,建议读者结合算法理论与工程实践,按照文档结构循序渐进地学习,充分利用所提供的网盘代码与模型资源,动手运行、调试并可视化算法结果,从而深入理解快速LDP-MST算法的设计思想与实现细节,提升科研效率与创新能力。
内容概要:本文围绕考虑电动汽车灵活性的微网多时间尺度协调调度问题展开研究,提出了一种基于Matlab的代码实现方案。研究充分利用电动汽车作为移动储能单元所具有的时空灵活性,将其整合到微网能量管理系统中,构建了涵盖日前计划与实时调整两个时间尺度的协调优化调度模型。模型综合考虑了可再生能源(如光伏发电)的波动性、负荷需求变化、分时电价机制以及电动汽车用户的充放电行为等多重因素,通过建立以最小化系统综合运行成本为目标的优化问题,并结合适当的约束条件,采用优化算法求解,从而实现对微网内多种分布式资源的高效协同调度。该方法有效提升了微网对可再生能源的消纳能力和系统运行的经济性与稳定性。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事微网、智能电网相关工作的工程技术人员。; 使用场景及目标:①用于教学与科研中深入理解微网多时间尺度调度的机制与建模方法;②为实际微网工程项目中引入电动汽车参与需求响应与调度提供理论依据和可复用的仿真工具;③支撑在能源互联网背景下开展关于需求响应、分布式能源集成及灵活性资源优化利用的前沿研究。; 阅读建议:建议读者结合提供的Matlab代码,逐步理解从问题建模、目标函数设计、约束条件设定到最终优化求解的完整流程,重点关注电动汽车灵活性建模与多时间尺度协调策略的具体实现方式。同时,可通过修改电动汽车渗透率、改变充电策略或调整电价信号等参数进行扩展实验,以深化对系统灵活性资源调度效果与影响因素的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值