如何在模板中使用 webapp2.uri_for?
Posted
技术标签:
【中文标题】如何在模板中使用 webapp2.uri_for?【英文标题】:How to use webapp2.uri_for in a template? 【发布时间】: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 正在进入模板。
如何让这个东西工作?
【问题讨论】:
也许将其设置为 jinja2 (我知道的方式)那样的全局? ***.com/questions/7081250/… 【参考方案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以上是关于如何在模板中使用 webapp2.uri_for?的主要内容,如果未能解决你的问题,请参考以下文章