为啥这个模板过滤器无效?

Posted

技术标签:

【中文标题】为啥这个模板过滤器无效?【英文标题】:Why is this template filter invalid?为什么这个模板过滤器无效? 【发布时间】:2015-02-21 04:39:39 【问题描述】:

我在这里做错了什么?

我在 templatetags 目录中名为 accounts_extras.py 的模块中有roundnumber。在我的模板中,顶部有 % load accounts_extras %。还值得注意的是,“upto”目前正在另一个模板中工作(尚未在此模板上尝试过),但问题出在 roundnumber 上。 staravg.stars__avg|roundnumber 给了我一个无效的过滤器错误。

#accounts_extras.py
from django import template
from django.template.defaultfilters import stringfilter

register = template.Library()

@register.filter
@stringfilter
def upto(value, delimiter=None):
    return value.split(delimiter)[0]
upto.is_safe = True


@register.filter
def roundnumber(value):
    if value > 1.75 and value < 2.25
    return 2
    if value > 2.25 and value < 2.75
    return 2.5
    if value > 2.75 and value < 3.25
    return 3
    if value > 3.25 and value < 3.75
    return 3.5
    if value > 3.75 and value < 4.25
    return 4

问题是我在同一个模块中有两个过滤器吗?允许吗?

【问题讨论】:

roundnumber 有很多语法错误,请先修复它们。另外,value &gt; 1.75 and value &lt; 2.25 可以写成1.75 &lt; value &lt; 2.25 如果您知道您的输入值将始终介于 1.75 和 4.25 之间,那么您的 roundnumber 函数可以重写为 return 0.5 * math.ceil(value * 2) 如果不是,那么您可以存储这个值,如果它超出了2 和 4 你可以返回任何你想要的东西。 【参考方案1】:

您的过滤器定义很好。问题在于缺少冒号和缩进:

@register.filter
def roundnumber(value):
    if value > 1.75 and value < 2.25: # colon
        return 2 # indentation
    # ...

【讨论】:

以上是关于为啥这个模板过滤器无效?的主要内容,如果未能解决你的问题,请参考以下文章

“模板语法错误:过滤器无效:”;基于 django 文档的自定义 django 模板过滤器损坏,但模板标签有效

为啥这个 ffmpeg 过滤器会导致“Invalid Size”错误?

我的自定义 Django 模板过滤器但没有任何其他过滤器的“无效过滤器”错误

django:过滤器无效

为啥这个嵌套的可变参数模板是无效参数?

为啥 Django 模板不能从对象字段中识别列表?