所以我有一个简单的模板问题。在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
为什么不在模板中?
答案 0 :(得分:0)
您确定recipe.recipe_style
实际上等于'Dinner'
吗?可能有额外的空格使其失败,但浏览器仍然会显示相同的内容(因为浏览器会忽略多个空间进行显示)。
尝试使用pre
标记进行换行,或在视图中重新打印以获取配方,如:
print repr(recipe.recipe_style)
然后重新加载页面并检查开发服务器控制台,它应该显示字符串值(用引号)。
答案 1 :(得分:0)
我做错了。我的if语句是过滤传递给模板的查询集;笨,对吧?我通过在视图中过滤配方模型然后传递过滤的查询集来修复它。