带有 if 语句的 Google App Engine 上的 Django 模板

Posted

技术标签:

【中文标题】带有 if 语句的 Google App Engine 上的 Django 模板【英文标题】:Django template on Google App Engine with if statement 【发布时间】:2011-08-06 08:42:53 【问题描述】:

我对谷歌应用引擎还很陌生,刚刚读完入门指南。所以我开始在 GAE 上实现一个简单的应用程序,当我简单地渲染一个使用 if 语句的 html 时,很快就收到一个错误,说“TemplateSyntaxError,“'if' 语句格式不正确””。我使用 ifequal 语句解决了这个问题,但本教程向我展示了在 index.html (http://code.google.com/appengine/docs/python/gettingstarted/templates.html) 中使用 if 语句

我是否错过了在模板中使用 if 语句的任何内容?

谢谢, 哟

更新: 这是错误的详细信息。我认为克里斯的回答会让我使用“智能”如果标签。我会尽快将 Django 版本更新到 1.2。

Traceback (most recent call last):
  File "C:\Program Files\Google\google_appengine\google\appengine\ext\webapp\__init__.py", line 634, in __call__
    handler.get(*groups)
  File "C:\Store house\gae\community\src\community.py", line 24, in get
    self.response.out.write(template.render(path, template_values))
  File "C:\Program Files\Google\google_appengine\google\appengine\ext\webapp\template.py", line 72, in render
    t = load(template_path, debug)
  File "C:\Program Files\Google\google_appengine\google\appengine\ext\webapp\template.py", line 100, in load
    template = django.template.loader.get_template(file_name)
  File "C:\Program Files\Google\google_appengine\lib\django_0_96\django\template\loader.py", line 80, in get_template
    template = get_template_from_string(source, origin, template_name)
  File "C:\Program Files\Google\google_appengine\lib\django_0_96\django\template\loader.py", line 88, in get_template_from_string
    return Template(source, origin, name)
  File "C:\Program Files\Google\google_appengine\lib\django_0_96\django\template\__init__.py", line 158, in __init__
    self.nodelist = compile_string(template_string, origin)
  File "C:\Program Files\Google\google_appengine\lib\django_0_96\django\template\__init__.py", line 174, in compile_string
    return parser.parse()
  File "C:\Program Files\Google\google_appengine\lib\django_0_96\django\template\__init__.py", line 273, in parse
    compiled_result = compile_func(self, token)
  File "C:\Program Files\Google\google_appengine\lib\django_0_96\django\template\loader_tags.py", line 154, in do_extends
    nodelist = parser.parse()
  File "C:\Program Files\Google\google_appengine\lib\django_0_96\django\template\__init__.py", line 273, in parse
    compiled_result = compile_func(self, token)
  File "C:\Program Files\Google\google_appengine\lib\django_0_96\django\template\loader_tags.py", line 132, in do_block
    nodelist = parser.parse(('endblock', 'endblock %s' % block_name))
  File "C:\Program Files\Google\google_appengine\lib\django_0_96\django\template\__init__.py", line 273, in parse
    compiled_result = compile_func(self, token)
  File "C:\Program Files\Google\google_appengine\lib\django_0_96\django\template\defaulttags.py", line 655, in do_if
    raise TemplateSyntaxError, "'if' statement improperly formatted"
TemplateSyntaxError: 'if' statement improperly formatted

更新 2: 根据这篇文章(http://code.google.com/appengine/docs/python/tools/libraries.html#Django),当前的谷歌应用引擎已经包含在 Django 1.2 中,但当前的默认版本是 0.96,这就是为什么我不能'不使用 if 标签。要使用 1.2 版,请按照上面链接中的说明进行操作。现在,我可以使用“智能”if 标记。谢谢大家:)

【问题讨论】:

能否显示引发错误的模板摘录? 【参考方案1】:

确保您完全遵循 django 模板的语法。确保您的 if 包含在 % % 中。还要确保%%for 之间有空格。 要了解更多信息,请通过此Django templating

% if var1 %
  var1|safe 
% endif %

【讨论】:

这将引发模板语法异常。【参考方案2】:

如果您尝试使用标签:

% if x == 1 %

您遇到的错误已解决

% ifequal x 1 %

这表明你的 Django 版本是 1.1 或更低。 “智能” if 标签came with version 1.2

编辑添加,Django 1.2 及更高版本在 GAE 上工作。如果您确实在运行旧版本的 Django,请参阅 this blog post 了解如何设置它。

【讨论】:

查看我的更新 2. Google 应用引擎已经包含 1.2 版本,但是目前您必须声明您要使用的版本,因为默认版本是 0.96。无论如何,您的回答帮助我弄清楚发生了什么。谢谢!

以上是关于带有 if 语句的 Google App Engine 上的 Django 模板的主要内容,如果未能解决你的问题,请参考以下文章

使用单元格格式值的 IF 语句

在 IF 语句 Google 表格中嵌入函数

带有日期(今天)的 Google 表格(脚本)中的 IF 函数

带有Firebase的Google App Engine-无法添加依赖项

Google 表格中的 IF 语句

在嵌套的 IFS 语句中保留 Google 表格中的日期格式