我有一个使用股票webapp2框架和Django模板引擎的GAE应用程序。此设置似乎不支持Django的内置{%url%}模板标记。
我想在我的模板中使用webapp2.uri_for函数,而不是将URL硬编码到我的模板中。这可能吗?如果是这样,我该怎么做?
答案 0 :(得分:2)
尝试编写自定义模板标记,请参阅https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#writing-custom-template-tags
您可以查看Django标记的源代码 https://github.com/django/django/blob/master/django/template/defaulttags.py#L1194
答案 1 :(得分:0)
是的,这是可能的。我今天遇到了同样的问题,最后得到了以下模板标签。我希望功能能够支持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