2012-06-27 41 views
4

我有一个使用股票webapp2框架和Django模板引擎的GAE应用程序。此设置似乎不支持Django的内置{%url%}模板标记。在Django模板中使用webapp2.uri_for

我的模板中使用了webapp2.uri_for函数,而不是将硬编码的URL加入到我的模板中。这可能吗?如果是这样,我该怎么做?

回答

0

是的,这是可能的看看Django的标签的源代码。我今天有同样的问题,并以下面的模板标签结束。我希望功能支持django“as”语法,以便从django url模板标签中引入。

from django import template 
import webapp2 

register = template.Library() 


def uri_for(parser, token): 
    """Webapp2 uri_for django template tag""" 
    bits = token.split_contents() 
    if len(bits) < 2: 
     raise template.TemplateSyntaxError("'%s' takes at least one argument (path to a view)" % bits[0]) 

    view_name = bits[1] 
    as_var = None 
    if len(bits) >= 2 and bits[-2] == 'as': 
     as_var = bits[-1] 

    return UriForNode(view_name, as_var) 
uri_for = register.tag(uri_for) 


class UriForNode(template.Node): 
    """Uri for node""" 
    def __init__(self, uri, as_var=None): 
     self.uri = uri 
     self.as_var = as_var 

    def render(self, context): 
     view = webapp2.uri_for(self.uri) 
     if self.as_var: 
      context[self.as_var] = view 
      return '' 
     return view