django模板if ==无法解析权利

时间:2012-05-08 06:33:06

标签: django

所以我有一个简单的模板问题。在URL视图中,我传递一个名为“style”的var,然后我传递一个带有一堆模型信息的字典。为了做到这一点:

{{ style }}
{% for recipe in recipes %}
    {{ recipe.recipe_style }}
    {% if recipe.recipe_style == style %}
        {{ recipe.recipe_style }}
    {% endif %}
{% endfor %}

那么这个块应该返回的是:

晚餐晚宴晚宴

因为配方模型中只有两个条目,都将'Dinner'设置为recipe_style(charfields),并且样式通过视图和urlconf传递(“r'^(?P [-A-Za] -z0-9 _] +)/“从网址'http://.../Dinner/'中抓取'晚餐')。它返回的是:

晚餐晚宴

这是因为if语句返回false。但为什么? “晚餐”==“晚餐”!我唯一的猜测是格式问题?在视图中传递之前我尝试了style = str(style),但仍然无效。

编辑:这是shell中显示的内容:

>>> RecipeStyle.objects.all()
[<RecipeStyle: Dinner>, <RecipeStyle: Lunch>, <RecipeStyle: American>, <RecipeStyle: Italian>, <RecipeStyle: French>]
>>> recipe = Recipe.objects.get(pk=1)
>>> recipe.recipe_style
<RecipeStyle: Dinner>

它可以在控制台中使用:

>>> if recipe.recipe_style == RecipeStyle.objects.get(pk=1):
...     print "poop"
... 
poop

为什么不在模板中?

2 个答案:

答案 0 :(得分:0)

您确定recipe.recipe_style实际上等于'Dinner'吗?可能有额外的空格使其失败,但浏览器仍然会显示相同的内容(因为浏览器会忽略多个空间进行显示)。

尝试使用pre标记进行换行,或在视图中重新打印以获取配方,如:

print repr(recipe.recipe_style)

然后重新加载页面并检查开发服务器控制台,它应该显示字符串值(用引号)。

答案 1 :(得分:0)

我做错了。我的if语句是过滤传递给模板的查询集;笨,对吧?我通过在视图中过滤配方模型然后传递过滤的查询集来修复它。