2012-09-15 69 views
0

webapp2说webapp2.uri_for是一个“可以传递给模板的独立uri_for版本”。听起来很完美。当我把它传递给Django模板渲染如下:如何在模板中使用webapp2.uri_for?

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: Could not parse the remainder: '('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正在进入模板。

我该如何获得这个东西?

+0

也许把它作为一个全球性的Jinja2的(顺便我知道)呢? http://stackoverflow.com/questions/7081250/webapp2-jinja2-how-can-i-get-uri-for-working-in-jinja2-views –

回答

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

+0

不,这是一个Django模板。 Django和Jinja非常接近,但不一样。 – dfrankow

+0

你不这样做,在Django的参数,如你在你的例子一样的函数调用'{{webapp2.uri_for(“接触”)}}',所以我的假设(您想使用Jinja2的模板代替)。 – alex

+0

如果你想在Django模板使用webapp2.uri_for那么你需要大概创建自定义标签,非常类似于内置'url'什么:https://docs.djangoproject.com/en/dev/ref /模板/建宏/#网址 – alex