【问题标题】:Using webapp2.uri_for in Django template在 Django 模板中使用 webapp2.uri_for
【发布时间】:2012-06-28 11:16:45
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    【讨论】:

    • webapp2 不支持自定义 Django 标签,是吗?
    【解决方案2】:

    是的,这是可能的。我今天有同样的问题,最后得到了以下模板标签。我希望该功能支持 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
    

    【讨论】:

      猜你喜欢
      • 2012-09-08
      • 2011-11-19
      • 2011-10-28
      • 2012-03-18
      • 1970-01-01
      • 2014-12-23
      • 2017-10-24
      • 2012-02-09
      • 2015-09-07
      相关资源
      最近更新 更多