【问题标题】:Pass {% url %} to custom template tag in Django将 {% url %} 传递给 Django 中的自定义模板标签
【发布时间】:2014-05-13 16:30:51
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

    简单的url标签支持赋值。

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

    【讨论】:

      【解决方案2】:

      如果有人真的想在他们的模板中没有大量垃圾的情况下完成这项工作,我发现您可以在 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 %}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-14
        • 2011-03-04
        • 2017-05-29
        • 1970-01-01
        • 2021-06-05
        • 2023-03-24
        • 2014-03-04
        • 2017-03-02
        相关资源
        最近更新 更多