【问题标题】:How to use webapp2.uri_for in a template?如何在模板中使用 webapp2.uri_for?
【发布时间】:2012-09-08 12:41:27
【问题描述】:

webapp2 说 webapp2.uri_for 是“可以传递给模板的独立 uri_for 版本”。听起来很完美。当我将它传递给 Django 模板渲染器时,如下所示:

import webapp2
from google.appengine.ext.webapp import template
self.response.out.write(template.render(path,
    { 'webapp2': webapp2 }))

并将其放入模板中

Please <a href="{{ webapp2.uri_for('contact') }}">send us 
your feedback</a>.

应用引擎 1.7.0 说

TemplateSyntaxError: 无法解析余数:'('contact')' from 'webapp2.uri_for('contact')'

如果我换了

Please <a href="{{ webapp2 }}">send us your feedback</a>.

它显示

module%20%27webapp2%27%20from%20%27/usr/local/google_appengine/lib/webapp2/webapp2.pyc%27%

所以我知道 webapp2 正在进入模板。

如何让这个东西工作?

【问题讨论】:

标签: google-app-engine django-templates webapp2


【解决方案1】:

google.appengine.ext.webapp.template 是一个 django 模板,但您的模板标记示例取自 Jinja2。

有关 webapp2 + Jinja2 的示例用法,请参见此页面: http://webapp-improved.appspot.com/api/webapp2_extras/jinja2.html

一旦您成功渲染了一个简单的模板,请将 'uri_for': webapp2.uri_for 添加到上下文中,或者更好的是,将其添加到 jinja2 全局变量中。

因此,对于 Django 模板,作为一个原始示例,您可以创建一个简单的标签:

register = template.Library()

@register.simple_tag(name='uri_for')
def webapp2_uri_for(route_name):
    return webapp2.uri_for(route_name)

然后像这样在你的模板中使用它:

{% uri_for 'contact' %}

查看详情: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

【讨论】:

  • 不,这是一个 Django 模板。 Django 和 Jinja 非常接近,但并不相同。
  • 您不会像在示例 {{ webapp2.uri_for('contact') }} 中那样在 Django 中使用参数进行函数调用,因此我的假设是(您想改用 Jinja2 模板)。
  • 如果你想在 Django 模板中使用 webapp2.uri_for,那么你可能需要创建一个自定义标签,非常类似于内置的url:docs.djangoproject.com/en/dev/ref/templates/builtins/#url
猜你喜欢
  • 2012-06-28
  • 2011-11-19
  • 2011-10-28
  • 1970-01-01
  • 2012-02-09
  • 2014-12-23
  • 2012-03-18
  • 2017-10-04
  • 2012-12-12
相关资源
最近更新 更多