Почему этот фильтр шаблона недействителен?

Что я здесь делаю неправильно?

У меня есть roundnumber в модуле под названием account_extras.py, расположенном в каталоге templatetags. В моем шаблоне вверху есть {% load account_extras %}. Также стоит отметить, что upto в настоящее время работает в другом шаблоне (еще не пробовал его в этом шаблоне), но проблема связана с круглым числом. {{ 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

Проблема в том, что у меня два фильтра в одном модуле? Это разрешено?


person stephan    schedule 23.12.2014    source источник
comment
roundnumber содержит много синтаксических ошибок, сначала исправьте их. Кроме того, value > 1.75 and value < 2.25 может быть записано как 1.75 < value < 2.25   -  person okm    schedule 23.12.2014
comment
Если вы знаете, что ваше входное значение всегда будет между 1,75 и 4,25, тогда ваша функция roundnumber может быть переписана как return 0.5 * math.ceil(value * 2) Если нет, то вы можете сохранить это значение, и если оно выходит за пределы 2 и 4, вы можете вернуть все, что хотите.   -  person sberry    schedule 23.12.2014


Ответы (1)


Ваше определение фильтра в порядке. Проблема с отсутствующими двоеточиями и отступами:

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