0

所以我有一个简单的模板问题。在 URL 视图中,我传递了一个名为“样式”的变量,然后传递了一个包含一堆模型信息的字典。要正确处理它:

{{ 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_]+)/" 从 URL 'http://.../Dinner/' 中获取 'Dinner')。它返回的是:

晚餐 晚餐 晚餐

这是因为 if 语句返回错误。但为什么?“晚餐”==“晚餐”!我唯一的猜测是格式问题?在将它传递给视图之前,我尝试了 style=str(style) ,但仍然没有用。

编辑:这是外壳中显示的内容:

>>> 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

那么为什么不在模板中呢?

4

2 回答 2

0

你确定这recipe.recipe_style实际上等于'Dinner'?可能会有额外的空格导致此操作失败,但浏览器仍会将其显示为相同(因为浏览器会忽略多个空格进行显示)。

尝试pre在您的视图中使用标签或 repr print 包装配方,例如:

print repr(recipe.recipe_style)

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

于 2012-05-08T07:38:25.480 回答
0

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

于 2012-05-09T02:50:00.823 回答