Django自定义模板标签和过滤器

发布时间:2019-05-23 21:02:31编辑:auto阅读(1762)

    1.创建模板库

    在某个APP所在目录下新建包templatetags,然后在其中创建存储标签或者过滤器的的模块,名称随意,例如myfilters.py

    在这个模块中编写相关代码。

    注意:templatetags所在APP应该在配置文件中进行配置。

    2.定义过滤器

    过滤器是一个函数,第一个参数是被处理的值,之后,可以有任意个参数,作为过滤器参数。

    from django import template
    from django.template.defaultfilters import stringfilter
    
    register=template.Library()
    
    # 去除指定字符串
    @register.filter(name='mycut')
    @stringfilter
    def mycut(value,arg):
        return value.replace(arg,'')
    
    # 注册过滤器
    # register.filter(name='mycut',filter_func=mycut)

    3.定义标签

    • simple_tag

      处理数据,并返回具体数据

      @register.simple_tag(name='posts_count')
      def total_posts():
          return Post.published.count()
    • inclusion_tag

      处理数据,并返回一个渲染的模板

      @register.inclusion_tag('blog/post/latest.html')
      def show_latest_posts(count=5):
          latest_posts=Post.published.order_by('-publish')[:5]
          return {
              'latest_posts':latest_posts,
          }

      blog/post/latest.html内容如下:

      <strong>最新文章</strong>
      <ul>
      {% for post in latest_posts %}
      <li>
          <a href="{% url 'blog:post_detail' post_id=post.id %}">{{ post.title }}</a>
      </li>
      {% endfor %}
      </ul>

    4.使用

    使用自定义的标签或过滤器之前,在模板文件中,需要使用 {% load 模块名称 %} 加载自定义的标签和过滤器。

    之后,就可以向使用Django自带的标签一样使用了。

    注意:即使当前模板继承的基模板中已经load了自定义标签或过滤器所在的模块,在当前模板中,依然需要再次load。

关键字