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 %}
这里已经有{% total_articles %}篇文章供您阅读
效果:
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 %}
{% endfor %}
上图主要是遍历出最新的5篇文章,然后交给视图渲染成超链接的HTML片段。
{% load article_tags %}
最新文章
{% 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格式,并显示在页面上。
效果:
有用的话请给点个赞~