在 Django 模板中使用 webapp2.uri_for

Posted

技术标签:

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

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

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

【问题讨论】:

【参考方案1】:

尝试编写自定义模板标签,见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

【讨论】:

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

【讨论】:

以上是关于在 Django 模板中使用 webapp2.uri_for的主要内容,如果未能解决你的问题,请参考以下文章

Django 在模板标签中使用变量

通过Django模板检测模板中使用的语言[关闭]

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

如何在 Django 模板中使用变量索引访问列表?

如何在 % % 之间的 Django 模板中使用变量

如何使用 django 在模板中显示默认值?