如何在模板中使用 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?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Word模板

如何在 Django 模板中嵌套或联合使用两个模板标签?

Django:如何在模板中使用设置? [复制]

如何在 C++ 中使用模板类型的子类传递模板函数参数?

如何使用模板声明成员函数? (不是模板类)

我将如何在 Django 模板标签中使用模板上下文变量的值? [复制]