webapp的模板标签中有'elseif'或'elif'吗

11 投票
3 回答
28177 浏览
提问于 2025-04-15 23:23

我的代码是:

Hello!~~~

{% if user %}
    <p>Logged in as {{ user.first_name }} {{ user.last_name }}.</p>
{% elif openid_user%}
    <p>Hello, {{openid_user.nickname}}! Do you want to <a href="{{openid_logout_url}}">Log out?</p>
{% else %}
    <p><a href="/login?redirect={{ current_url }}">google Log in</a>.</p>
    <p><a href="/twitter">twitter Log in</a>.</p>
    <p><a href="/facebook">facebook Log in</a>.</p>
    <p><a href="{{openid_login_url}}">openid Log in</a>.</p>
    <iframe src="/_openid/login?continue=/"></iframe>
{% endif %}

出现的错误是:

TemplateSyntaxError: Invalid block tag: 'elif'

难道这个网页应用没有 'else if' 吗?

谢谢

3 个回答

0

还有两个Django的代码片段,可以在模板语言中启用'elif'标签。

http://djangosnippets.org/snippets/1572/

http://djangosnippets.org/snippets/2243/

17

更新: 正如Jeff Bauer在下面的评论中所说,Django 1.4 提供了一个elif标签

原始回答如下:


《Django书籍》中提到:

没有{% elif %}标签。可以使用嵌套的{% if %}标签来实现相同的功能:

所以,你需要这样做

if
else
  if
  else

来实现if-elsif-else的效果。

这在他们的设计理念中也有体现:

目标不是创造一种编程语言。目标是提供足够的编程风格的功能,比如分支和循环,这对于做出与展示相关的决策是必不可少的。

16

webapp 本身没有模板,但你可以使用 Django 模板 - 默认情况下,这些模板来自很早以前的 Django 0.96(从我提到的老文档可以看到,这要求嵌套的 if 必须物理上放在 else 块里面)。你可以通过在 Python 代码开头添加以下内容,使用更新版本的 Django(更多细节可以查看 这里)。

import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'

from google.appengine.dist import use_library
use_library('django', '1.1')

不过,虽然这确实给你提供了一个在很多方面都有显著改进的模板语言,但这些改进并不包括 elseifelif 标签 -- 你 仍然 需要把第二个 if 明确地放在第一个 else 的里面。

撰写回答