【发布时间】:2014-07-01 11:24:02
【问题描述】:
如果在个人资料视图中循环浏览我的用户组以插入页面的不同块,但由于某种原因,它们并不像我期望的那样等同。这是模板:
{{ user_groups }}
{% for g in user_groups %}
{{ g }}
{% if g == "client" %}
client things
{% endif %}
{% if g == "guardian" %}
guardian things
{% endif %}
{% endfor %}
{% for group in request.user.groups.all %}
{{ group }}
{% ifequal group "guardian" %}
this is a guardian
{% endifequal %}
{% endfor %}
{% if "guardian" in user_groups %}
Give me some guardian stuff
{% endif %}
输出:
[] 监护人监护人
如您所见,我已经使用实际的用户对象和传递给 context[] 的列表来完成此操作。在这两种情况下,列表本身都没有迭代问题。两个循环都显示原始变量输出,但等于操作失败。
我可以让它像{% ifequal "something" "something" %} 那样进行比较,这将向我显示 if 块中的内容,但是将列表元素与字符串进行比较似乎并没有以任何方式工作,我试图完成它。
我知道我不能在 if 块中声明列表,但我绝不会这样做。关于为什么这会失败的任何想法?我错过了一些琐碎的事情吗?
【问题讨论】:
-
{% ifequal group.name "guardian" %}呢? -
那行得通。为什么这行得通?另外,这将如何影响 bar 语句中的 if foo(与 for 循环相反)?
-
ifequal是否有可能实际上将group转换为字符串,而==并没有隐含地这样做? -
您需要使用
group.name,因为您要比较group的名称,而不是group对象。 -
docs.djangoproject.com/en/1.6/ref/templates/builtins/#ifequal 这是 1.6 的文档,它明确显示了字符串比较。为什么
.name在这里有任何价值是我的问题。总的来说,我对 python 还是很陌生,所以我可能遗漏了一些细节,但很重要。
标签: python django list templates