为啥这个模板过滤器无效?
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 > 1.75 and value < 2.25
可以写成1.75 < value < 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”错误?