如何在模板中使用webapp2.uri_for?

时间:2012-09-15 18:24:49

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

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>.

app engine 1.7.0说

  

TemplateSyntaxError:无法解析余额:'('contact')'来自'webapp2.uri_for('contact')'

如果我改为

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

显示

  

模块%20%27webapp2%27%20from%20%27 / USR /本地/ google_appengine / LIB / webapp2的/ webapp2.pyc%27%

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

如何让这件事起作用?

1 个答案:

答案 0 :(得分:-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/