在Django中注册自定义过滤器

13

我的筛选器没有被注册,也不确定它被卡在哪里了。

在test/templatetags中

__init__.py
test_tags.py

test_tags.py 包括

from django import template

register.filter('intcomma', intcomma)

def intcomma(value):
    return value + 1

测试/模板包括pdf_test.html,其中包含以下内容

{% load test_tags %} 
<ul>
    <li>{{ value |intcomma |floatformat:"0"</li>
</ul>

浮点数格式没问题,但是intcomma不起作用

2个回答

24
首先,你还没有定义register

为了成为一个有效的标签库,模块必须包含一个名为register的模块级变量,它是一个template.Library实例,在其中注册所有标签和过滤器。

另外,我通常使用register.filter修饰函数:

from django import template

register = template.Library()

@register.filter
def intcomma(value):
    return value + 1

这不是我的问题,你可以按照文档中描述的两种方法都使用。 - user2954587
@user2954587 是的,但是你仍然没有定义 register - alecxe
明白了,但还是不起作用。还有其他想法或测试方法吗? - user2954587
@user2954587 好的,如果你省略 |floatformat:"0" 并仅使用 intcomma 过滤器呢? - alecxe
1
我在使用collectstatic时犯了一个极其愚蠢的错误。感谢您的耐心等待! - user2954587
显示剩余3条评论

2

从django.template.defaulttags导入register

from django.template.defaulttags import register

views.py

        from django.template.defaulttags import register
    
    @register.filter
    def intcomma(value):
        return value + 1
..........................other code.................................

enter image description here

list.html

{% extends "base.html" %}

    {% block content %}
    
      <ul>
        <li><h1>{{ 2.568|intcomma|floatformat:"0" }}</h1></li>
      </ul>
    
    {% endblock content %}

enter image description here

翻译:输出如下:

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接