【问题标题】:django templates : how to expand a variable into the string argument for the built-in tag `url`django 模板:如何将变量扩展为内置标签“url”的字符串参数
【发布时间】:2014-01-04 02:33:25
【问题描述】:

我正在尝试使以下模板 sn-p 工作:

<ul>
  {% for name,label in entries.items %}
    <li><a href="{% url name %}">{{ label }}</a></li>
  {% endfor %}
</ul>

如您所见,name 是一个变量,我需要先将其扩展为字符串,然后再将其传递给url 内置标签。

不幸的是,上述模板 sn-p 导致以下异常:

Exception Type: TemplateSyntaxError
Exception Value:    
Caught NoReverseMatch while rendering: Reverse for 'name' with arguments '()' and keyword arguments '{}' not found.

关于如何实现这一点的任何想法或替代方法?

【问题讨论】:

    标签: python django templates django-templates


    【解决方案1】:

    您的代码应该适用于 Django >= 1.4 (iirc) - 假设 name 解析为有效的 url 名称并且此 url 不需要 args 或 kwargs。对于 Django 1.3x,您必须将 {% load url from future %} 添加到您的模板中才能正常工作。对于 django

    【讨论】:

    • 这是我一直在寻找的答案。有用!谢谢! :)(我使用的是 django 1.3.7)
    【解决方案2】:

    您可以将变量传递给{% url %} 模板标签。如果 name 是有效的 urlpattern 名称,这个 sn-p 应该可以工作。

    如果您需要将name 转换为有效的urlpattern 名称,您可以使用自定义过滤器来完成,如下所示:

    {% url name|my_filter %}
    

    【讨论】:

    • 感谢您的回答。创建一个只调用 django url 解析器函数的自定义过滤器似乎有点多余;这就是为什么我希望在模板中找到解决方案。
    • @niekas:您发布的示例语法用于过滤器,而不是标签。
    猜你喜欢
    • 2017-03-19
    • 2012-07-13
    • 2013-09-02
    • 2011-10-15
    • 2010-10-25
    • 2014-10-10
    • 2012-02-02
    • 2012-11-17
    相关资源
    最近更新 更多