【发布时间】:2014-05-13 16:30:51
【问题描述】:
我正在开发一个需要多个参数的自定义 Django 模板标签。其中一个论点是 URL。当我尝试这样做时:
{% my_tag arg1 {% url "myview" %} arg3=5 %}
我收到以下模板语法错误:Could not parse the remainder: '{%' from '{%'
如何将 URL 传递给自定义模板?
【问题讨论】:
我正在开发一个需要多个参数的自定义 Django 模板标签。其中一个论点是 URL。当我尝试这样做时:
{% my_tag arg1 {% url "myview" %} arg3=5 %}
我收到以下模板语法错误:Could not parse the remainder: '{%' from '{%'
如何将 URL 传递给自定义模板?
【问题讨论】:
简单的url标签支持赋值。
{% url 'myview' as my_url %}
{% my_tag arg1 my_url arg3=5 %}
【讨论】:
如果有人真的想在他们的模板中没有大量垃圾的情况下完成这项工作,我发现您可以在 tag function 中简单地使用 django.urls.reverse
例如在你的标签函数中:
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 %}
【讨论】: