将{%url%}传递给Django中的自定义模板标记

时间:2014-04-02 11:55:01

标签: django django-templates

我正在开发一个需要多个参数的自定义Django模板标记。其中一个参数是URL。当我尝试这样做时:

{% my_tag arg1 {% url "myview" %} arg3=5 %}

我收到以下模板语法错误:Could not parse the remainder: '{%' from '{%'

如何将网址传递给自定义模板?

2 个答案:

答案 0 :(得分:6)

简单的url标记支持赋值。

{% url 'myview' as my_url %}
{% my_tag arg1 my_url arg3=5 %}

答案 1 :(得分:1)

如果有人确实想让这个工作没有在他们的模板中发现大量垃圾,我发现你只需在你的django.urls.reverse中使用tag function

例如,在您的代码功能中:

from django.urls import reverse

@register.simple_tag
def my_tag(arg1, url, arg3 = None, *args, **kwargs):
    # resolve the url (you don't have to pass both args and kwargs, it's up to you.)
    resolved_url = reverse(url, None, args, kwargs)
    # do whatever you have to do
    pass

在您的模板中,只需传递您将传递的字符串,如{% url 'myview' %}

{% my_tag arg1 'myview' arg3=5 %}

{% my_tag arg1 'myapp:myview' arg3=5 %}

通过传递args和/或kwargs,你可以传递额外的参数来反转(例如主键)。

{% # here the article.pk is passed to reverse # %}
{% my_tag arg1 'myapp:myview' arg3 article.pk %}