【问题标题】:Django - Reverse resolution of URL throws 'NoReverseMatch'Django - URL 的反向解析抛出“NoReverseMatch”
【发布时间】:2019-12-15 13:32:40
【问题描述】:

我在 urls.py 中有 url(r'^topics/(?P<topic_id>\d+)/$', views.topic, name='topic'),但是当我尝试访问 localhost:8000/topics/1 时,它告诉我它尝试了一种模式:topics/(?P<topic_id>**\\**d+)/$ 我想应该是topics/(?P<topic_id>**\**d+)/$

我正在使用一本书,名为 Python 速成课程(第 1 版)(第 18 章)。 这是一个使用 Django 1.11 和 Python 的本地服务器。我在 url 模式上尝试了很多重新格式化,但我是新手,所以我不知道还能做什么。

...
urlpatterns = [
    url(r'^$', views.index, name='index'),

    # Show all topics.
    url(r'^topics/$', views.topics, name='topics'),

    # Detail page for a single topic.
    url(r'^topics/(?P<topic_id>\d+)/$', views.topic, name='topic'),
]

我希望它会弹出正确的页面,但它总是显示“NoReverseMatch at /topics/01/

【问题讨论】:

  • localhost:8000/topics/1你没有忘记尾部斜杠吗?
  • 对不起,是的。

标签: python django


【解决方案1】:

所以您忘记了 URL 末尾的斜杠,因此它不匹配。

您可以从正则表达式中删除斜杠,但这会改变问题:如果您放置斜杠,它将不起作用。

我想你可以用/?$ 结束这个模式,但这里有一个可能更强大的解决方案:Jiaaro's answer to: django urls without a trailing slash do not redirect

基本上:

检查 settings.py 文件中的 APPEND_SLASH 设置

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    • 2016-03-28
    • 2017-08-03
    • 1970-01-01
    • 2014-01-20
    • 2023-03-21
    相关资源
    最近更新 更多