【问题标题】: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 你可以返回任何你想要的东西。

标签: django django-templates django-filter django-template-filters


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 2019-01-31
    • 2016-07-27
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多