【问题标题】:NoReverseMatch error after upgrade Django version升级 Django 版本后出现 NoReverseMatch 错误
【发布时间】:2026-02-09 21:45:01
【问题描述】:

我是 Django 的新手,我在这里阅读了很多主题,但没有找到适合我的案例的解决方案。我相信这很容易,但我找不到解决方案。

基本上我的 urls.py 中有代码,并且在 Django 1.8.4 中工作正常:

    from django.conf.urls import include, url
    from django.contrib import admin

    urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^leds/', include('ledscontrol.urls')),
    url(r'^', 'controli2c.view.view_home'),
    ]

我的模板文件包含

        {% url 'controli2c.views.view_home' as home_url%}
        <a href="{% url 'controli2c.views.view_home' %}" {% if request.path == home_url  %} class="active"{% endif %} >HOME</a>

当我更新 Django 时,我收到错误“TypeError: view must be a callable or a list/tuple in the case of include()”。然后,我将 urls.py 代码更改为:

from django.conf.urls import include, url
from django.contrib import admin
from . import views

urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^leds/', include('ledscontrol.urls')),
url(r'^', 'views.view_home'),
]

现在,当我打开浏览器时,我有 NoReverseMatch (http://localhost:8000):

“未找到 'controli2c.view.view_home' 的反向。'controli2c.views.view_home' 不是有效的视图函数或模式名称。”

在论坛的帖子中我发现:

“解决方案是更新您的 urls.py 以包含可调用的视图。这意味着您必须在 urls.py 中导入视图。如果您的 URL 模式没有名称,那么现在是现在是添加一个的好时机,因为使用虚线 python 路径进行反转不再有效。”

我相信这是我的问题。但我不知道我必须做些什么改变。

谁能帮帮我?

非常感谢!!

【问题讨论】:

  • 哪一点你不明白?您需要使用可调用对象而不是字符串,并且需要给它一个特定的名称。
  • 您似乎在使用this project。 18个月没更新了,找别的库可能会更好。如果你决定使用它,那么我会坚持使用 Django 1.8.X(最新的版本是 1.8.18)而不是尝试升级它,特别是如果你是 Django 新手。 Django 1.8 是 LTS,因此至少会在 2018 年 4 月之前得到支持。

标签: python django django-templates django-views


【解决方案1】:

现在你必须传递一个可调用对象,所以:

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^leds/', include('ledscontrol.urls')),
    url(r'^', views.view_home),
]

我认为它现在可能有效。

【讨论】:

  • 嗨!对不起,我在尝试中完全写了这段代码。所以,这不是解决方案。谢谢!
【解决方案2】:

我找到了解决办法!

为了让我的模板文件使用相同的代码,我进行了这些更改

from django.conf.urls import include, url
from django.contrib import admin
from . import views

urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^leds/', include('ledscontrol.urls')),
url(r'^', 'views.view_home',name='controli2c.views.view_home'),
]

谢谢!

【讨论】: