【问题标题】:NoReverseMatch for Django and DjangoCMS AppDjango 和 DjangoCMS 应用程序的 NoReverseMatch
【发布时间】:2022-01-20 10:55:44
【问题描述】:

我正在尝试为论坛上的标签和类别设置一些 URL。链接看起来像这样

<a href="{% url 'article-list-by-tag' %}{{ tag }}" class="badge badge-info" >{{ tag }}</a>

URL 模式article-list-by-tag 来自一个名为 AldrynNewsblog 的 DjangoCMS 应用程序。可以找到HERE,看起来像这样

url(r'^tag/(?P<tag>\w[-\w]*)/',
    TagArticleList.as_view(), name='article-list-by-tag'),

请注意,NewsBlog 的 urls.py 中没有声明 app_name

应用程序本身是一个名为 DjangoCMS 的更大的 Django 应用程序的一部分。后者的 url 入口点在项目的主 urls.py 中声明如下:

path('', include('cms.urls')),

我得到的错误是

Reverse for 'article-list-by-tag' not found. 'article-list-by-tag' is not a valid view function or pattern name.

我应该怎么做才能解决这个问题?我尝试将命名空间添加到各种 URL 条目以及将 app_name 添加到 NewsBlog 均无济于事。使用的 Django 版本是 2.1

【问题讨论】:

    标签: python django django-cms


    【解决方案1】:

    您需要将tag.slug 作为URL 的参数传递,所以:

    &lt;a href="{% url 'article-list-by-tag' <strong>tag=tag.slug</strong> %}" class="badge badge-info" &gt;{{ tag }}&lt;/a&gt;

    如果使用命名空间导入它,则需要在视图名称前加上该前缀,因此'<b>some_namespace:</b>article-list-by-tag'

    【讨论】:

    • 我试过了,并没有解决问题。问题是无法识别该模式。我看不出添加蛞蝓会有什么帮助。我错过了什么吗?附言您对蛞蝓的看法可能是正确的(一旦识别出模式,我就会发现)。
    【解决方案2】:

    如果它对任何人有帮助,以下代码适用于我的用例:

    &lt;a href="{% namespace_url 'article-list-by-tag' tag=tag.slug %}" class="badge badge-info" &gt;{{ tag }}&lt;/a&gt;

    namespace_url 是 DjangoCMS 提供的模板标签。

    【讨论】:

      猜你喜欢
      • 2013-10-16
      • 1970-01-01
      • 1970-01-01
      • 2017-03-21
      • 2014-07-13
      • 2014-02-18
      • 2016-06-18
      • 1970-01-01
      • 2015-04-21
      相关资源
      最近更新 更多