Django:不推荐使用 url() 的字符串视图参数支持,并将在 Django 1.10 中删除
Django: Support for string view arguments to url() is deprecated and will be removed in Django 1.10
新 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
我尝试使用本文档中提供的代码 "import" views 或 main:
from . import views
或
from . import main
这给了我:
ImportError: cannot import name 'views'
和
ImportError: cannot import name 'main'
我相信我已经将此归结为一个导入错误,目前正在对此进行研究。
我找到了问题的答案。这确实是一个导入错误。对于 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)
]
我没有更改应用程序或 view.py 文件中的任何内容。
支持@Rik Poggi 说明如何在他对这个问题的回答中导入:
Django - Import views from separate apps
您应该可以使用以下内容:
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
的相对导入。
您可以通过将所有函数导入列表并将它们中的每一个添加到 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),
]
新 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
我尝试使用本文档中提供的代码 "import" views 或 main:
from . import views
或
from . import main
这给了我:
ImportError: cannot import name 'views'
和
ImportError: cannot import name 'main'
我相信我已经将此归结为一个导入错误,目前正在对此进行研究。
我找到了问题的答案。这确实是一个导入错误。对于 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)
]
我没有更改应用程序或 view.py 文件中的任何内容。
支持@Rik Poggi 说明如何在他对这个问题的回答中导入: Django - Import views from separate apps
您应该可以使用以下内容:
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
的相对导入。
您可以通过将所有函数导入列表并将它们中的每一个添加到 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),
]