在 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)的主要内容,如果未能解决你的问题,请参考以下文章

单击指向另一个模板的链接时,Django 模板只会重新加载

Django-admin:如何在记录更改列表中显示指向对象信息页面的链接而不是编辑表单?

在 Django 管理更改/添加页面中显示 ForeignKey 数据

Django 使用绑定表单重定向到另一个视图

防止 Django 模板表单中的重定向

Django学习7 -- 添加个人应用(自定义应用页面优化)