django template 不支持 if 嵌套吗?

2014-01-14 00:57:04 +08:00
 cbsw
如下会出现:Invalid block tag: 'else', expected 'endblock'

{% if user.is_authenticate %}
{% if user in group1 %}
group1 page
{% elif user in group2 %}
group2 page
{% elif user in group3 %}
group3 page
{% endif %}
{% else %}
anonymous user page
{% endif %}

如果 django 不支持 if 嵌套的话,怎么实现上述功能?
6266 次点击
所在节点    Django
8 条回复
okidogi
2014-01-14 01:40:33 +08:00
django1.4以后才支持elif,你的django版本是?
cbsw
2014-01-14 08:20:13 +08:00
@okidogi virtualenv 装的最新版1.6.1
mengzhuo
2014-01-14 09:28:12 +08:00
In [23]: compile_string("""{% if user.is_authenticate %}
{% if user in group1 %}
group1 page
{% elif user in group2 %}
group2 page
{% elif user in group3 %}
group3 page
{% endif %}
{% else %}
anonymous user page
{% endif %}""", '')
Out[23]: [<IfNode>]

明显是可以的嘛~
mengzhuo
2014-01-14 09:29:00 +08:00
oh~
In [24]: from django import VERSION

In [25]: VERSION
Out[25]: (1, 5, 1, 'final', 0)
cbsw
2014-01-14 09:51:00 +08:00
@mengzhuo 的确可以,刚才又仔细检查了一遍,发现有个 if 的右 % 漏了。(BTW,我记得以前 web-mode 是支持 django template 括号和百分号自动匹配的啊,现在得手动输右%和括号)
luoyou1014
2014-01-14 12:59:44 +08:00
@okidogi 好奇下, 1.4之后才支持if, 那之前的版本怎么办的啊?
cbsw
2014-01-14 13:08:37 +08:00
@luoyou1014 是 1.4 以后支持 elif ,以前只能写 {% if A %} {% else %} {% if B %} {% else %} {% if C %} {% else %},每次要多写几个 else,1.4 之后把 else 和 if 缩写成 elif 了,(lazy man's suggestion i think :-)
luoyou1014
2014-01-22 16:39:33 +08:00
@cbsw Thank you.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/96893

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX