我正在开发一个需要多个参数的自定义Django模板标记。其中一个参数是URL。当我尝试这样做时:
{% my_tag arg1 {% url "myview" %} arg3=5 %}
我收到以下模板语法错误:Could not parse the remainder: '{%' from '{%'
如何将网址传递给自定义模板?
答案 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 %}