2017-04-10 127 views
0

我是Django的新手,我在这里阅读了很多主题,但没有找到解决方案。我相信这很容易,但我找不到解决方案。升级后的NoReverseMatch错误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,我得到的错误“在include()”的情况下,TypeError:视图必须是可调用的或列表/元组。然后,我改变我的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. 认为如果您的网址格式没有名称,现在是添加网址的好时机,因为使用虚线python路径反转不再起作用。“

我认为这是我的问题。但我不知道我必须做什么改变。

任何人都可以帮到我吗?

非常感谢!

+0

哪一点你不明白?你需要使用可调用的而不是字符串,并且你需要给它一个特定的名字。 –

+0

看起来你正在使用[这个项目](https://github.com/blobsmith/controli2c)。它尚未更新18个月,因此寻找另一个图书馆可能会更好。如果你决定使用它,那么我会坚持使用Django 1.8.X(最新的版本是1.8.18),而不是试图升级它,特别是如果你是Django的新手。 Django 1.8是一款LTS,因此将至少支持至2018年4月。 – Alasdair

回答

0

我找到了解决方案!

让我的模板文件使用相同的代码,我必须让这些变化

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'), 
] 

谢谢!

0

现在你必须通过一个可调用的,所以:

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

我认为现在可能会奏效。

+0

嗨!我很抱歉,我试图编写这段代码。所以,这不是解决方案。谢谢! – FelipeFonsecabh