在 Django(3.1) 中添加指向另一个页面的链接 (NoReverseMatch)

Posted

技术标签:

【中文标题】在 Django(3.1) 中添加指向另一个页面的链接 (NoReverseMatch)【英文标题】:Adding a link to another page in Django(3.1) (NoReverseMatch) 【发布时间】:2021-03-17 15:28:02 【问题描述】:

我正在尝试在我的索引页面上添加指向另一个页面的链接,但是当我使用 % url 'blog:BlogAbout' % 时,我得到:

Exception Type: NoReverseMatch
Exception Value:'blog' is not a registered namespace

index.html:

<a href="% url 'blog:BlogAbout' %">About Me</a>

blog.urls.py:

path('about/', views.about, name="BlogAbout"),

blog.views.py:

def about(request):
    return render(request, 'blog/about.html')

urls.py:

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

这个问题几乎是熟悉的:How do I add link to another page [Django 3.0]? Reverse not found

我正在这样做,但仍然出现错误。 添加链接的正确方法是什么?

【问题讨论】:

分享urls.py 【参考方案1】:

如果您在urls.py 中指定app_name = 'blog',则blog: 前缀。如果您不这样做,则没有“命名空间”,因此 url 很简单:

&lt;a href="% url <b>'BlogAbout'</b> %"&gt;About Me&lt;/a&gt;

如果要使用命名空间,请在 urls.py 中指定:

app_name = 'blog'

urlpatterns = [
    path('about/', views.about, name='BlogAbout'),
    # …,
]

或者,您可以使用include(…) function [Django-doc] 中的namespace=… 参数来指定:

    path('', include('blog.urls'<b>, namespace='blog'</b>)),

然后你指定这个:

&lt;a href="% url <b>'blog:BlogAbout'</b> %"&gt;About Me&lt;/a&gt;

【讨论】:

谢谢!但是当我想使用命名空间时,我需要在 urls.py 中的什么地方指定呢? @Luca:您在urls.py 中使用app_name = ... 指定。

以上是关于在 Django(3.1) 中添加指向另一个页面的链接 (NoReverseMatch)的主要内容,如果未能解决你的问题,请参考以下文章