Django:将变量传递给除id之外的simple_tag失败

时间:2016-08-18 12:44:38

标签: python django django-templates django-custom-tags

情况很简单:我想在这样的模板中显示特定对象(模型块):{% block_by_name editorial as b %} {{ b.title }}或者最好使用像{{ block.title|get_by_name:editorial }}这样的过滤器。

我成功了一个simple_tag。

按ID获取项目工作正常:

# in templatetags
@register.simple_tag
def block_by_id(id=1):
    b = Block.objects.get(id=id)
    return b


# in html template it get block with id 3 and shows it OK
{% block_by_id 3 as b %} {{ b.title }}

但是,当我想通过下面的名称或标签获取块时,

按名称获取项目

#
@register.simple_tag
def block_by_name(n="default_name"):
    b = Block.objects.get(name=n)
    return b

# in html template it fails to get block with name "editorial"
{% block_by_name editorial as b %} {{ b.title }}

Django显示错误Block matching query does not exist 因为它假设变量n是空字符串,但我通过它:"编辑"

追溯:

        b = Block.objects.get(name=n)

     ...

▼ Local vars
Variable    Value
n   

''

不确定为什么会这样。 如何传递变量以使其不会消失?

1 个答案:

答案 0 :(得分:1)

但是你没有通过"editorial",你通过了editorial。这是一个不存在的变量。使用字符串。