首页 文章

Django:不支持对url()的字符串视图参数的支持,将在Django 1.10中删除

提问于
浏览
25

新的python / Django用户(实际上是SO的新用户):

尝试迁移我的Django项目时,出现错误:

RemovedInDjango110Warning: Support for string view arguments to url() is deprecated 
and will be removed in Django 1.10 (got main.views.home). Pass the callable instead.   
url(r'^$', 'main.views.home')

显然第二个参数不再是一个字符串了 . 我来创建这个代码,因为它是通过pluralsight.com的教程,教程如何使用Django与以前的版本(我目前正在使用1.9) . 老师指示我们从我们在应用中创建的视图中创建urls.py中的urlpatterns . 他告诉我们要创建一个urlpattern,如下所示:

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

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', 'main.views.home')
]

参考

def home(request):
    return render(request, "main/home.html",
                    {'message': 'You\'ve met with a terrible fate, haven\'t you?'}) #this message calls HTML, not shown, not important for question

在我创建的应用程序“main”的views.py中 .

如果不推荐使用此方法,如何将视图参数作为字符串传递?如果我只是删除引号,如文档(https://docs.djangoproject.com/en/1.9/topics/http/urls/)中所示,我收到一个错误:

NameError: name 'main' is not defined

我尝试使用本文档中提供的代码“导入”视图或主要内容:

from . import views

要么

from . import main

这给了我:

ImportError: cannot import name 'views'

ImportError: cannot import name 'main'

我相信我已将此描述为导入错误,目前我正在研究这个问题 .

3 回答

  • 48

    我找到了问题的答案 . 这确实是一个导入错误 . 对于Django 1.10,您现在必须导入应用程序的view.py,然后传递url()的第二个参数而不带引号 . 这是我现在在urls.py中的代码:

    from django.conf.urls import url
    from django.contrib import admin
    import main.views
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^$', main.views.home)
    ]
    

    我没有更改app或view.py文件中的任何内容 .

    @Rik Poggi的道具,用于说明如何导入这个问题的答案:Django - Import views from separate apps

  • 8

    您应该能够使用以下内容:

    from django.conf.urls import url
    from django.contrib import admin
    
    from main import views
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^$', views.home)
    ]
    

    我并不完全确定您的目录结构是什么样的,但使用相对导入(例如 from . import X )是因为文件彼此位于同一文件夹中 .

  • 1

    您可以通过导入所有这些函数来使用您的函数,并将其中的每一个添加到urlpatterns .

    from django.conf.urls import url
    from django.contrib import admin
    
    from main.views import(
       home,
       function2,
       function3,
    )
    
    urlpatterns = [
       url(r'^admin/', admin.site.urls),
       url(r'^$', home),
       url(r'^$', function2),
       url(r'^$', function3),
    ]
    

相关问题