Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:对url()的字符串视图参数的支持已被弃用,并将在Django 1.10中删除_Python_Django_Url_Deprecated - Fatal编程技术网

Python Django:对url()的字符串视图参数的支持已被弃用,并将在Django 1.10中删除

Python Django:对url()的字符串视图参数的支持已被弃用,并将在Django 1.10中删除,python,django,url,deprecated,Python,Django,Url,Deprecated,新的python/Django用户(确实是新用户): 尝试迁移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')

新的python/Django用户(确实是新用户):

尝试迁移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)。老师指示我们从我们在应用程序中创建的视图在url.py中创建URL模式。他教我们创建如下模式:

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

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', 'main.views.home')
]
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)
]
参考

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中

如果不推荐使用此方法,如何传递视图参数而不是字符串?如果我只是删除引号,如文档()所示,我会得到一个错误:

NameError: name 'main' is not defined
我尝试使用本文档中提供的代码“导入”视图或主视图:

from . import views

这给了我:

ImportError: cannot import name 'views'


我相信我已经找到了一个导入错误的原因,目前正在对此进行研究。

我已经找到了问题的答案。这确实是一个输入错误。对于Django 1.10,现在必须导入应用程序的view.py,然后传递url()的第二个参数,不带引号。下面是我现在在URL.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)
]
我没有更改应用程序或view.py文件中的任何内容

@Rik Poggi在回答这个问题时演示如何导入的道具:

您应该能够使用以下功能:

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

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', 'main.views.home')
]
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。“导入X”
适用于文件彼此位于同一文件夹中的情况。

您可以通过将所有文件导入列表并将其添加到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/$', home),

   url(r'function2/^$', function2),
   url(r'^$', function3),
]

在发布之前,我已经找到了问题的答案。我想把它贴出来,这样其他人就不必再做同样的蠢事了。这是我第一次发布问题,如果这不是分享信息的最佳方法,请告诉我更好的方法。如果您已经回答了自己的问题,请将您的答案标记为解决方案。感谢您的留言,但我似乎在提出问题后的两天内无法接受我自己的答案作为解决方案。帮助了我,我正在学习Django tooWelcome to stack overflow的教程。Django曾一度稍微改变了布局。我想你想从主要的进口观点,但不确定。。。你能试试吗?是的,我也检查过这个方法,它的工作原理如下:如果使用“来自主导入视图”,那么你的url参数必须是“url(…,views.home)”,而不是“url(…,main.views.home)”@joey wilhelm说明了以下内容!看来这也行。我确实更喜欢“导入main.views”,然后调用url(…,main.views.home)而不是“从主导入视图”并调用url(…,views.home),因为一旦我有了多个应用程序,我就可以保留视图。方括号
[]
现在允许导入了吗,你打算使用
()
?为什么要为完全相同的URL模式添加多个视图?根据文档:“3.Django按顺序运行每个URL模式,并在与请求的URL匹配的第一个模式处停止,与path_info匹配。”。我不确定2016年的最新版本中是否已经存在这种情况,但只要我与Django合作,它就会停止在第一个匹配模式中。@MichaelS。你说得对,我已经改正了。