新的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
在app的views.py中,#34; main"我创造的。
如果不推荐使用此方法,如何将视图参数作为字符串传递?如果我只是删除引号,如文档(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'
我相信我已将此问题追溯到导入错误,目前我正在研究这个问题。
答案 0 :(得分:50)
我找到了问题的答案。这确实是一个导入错误。对于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
答案 1 :(得分: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
)是指文件在彼此相同的文件夹中。
答案 2 :(得分:2)
您可以通过将所有功能导入列表来使用您的功能,并将每个功能添加到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),
]