web-dev-qa-db-ja.com

Django:url()への文字列ビュー引数のサポートは廃止され、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')

どうやら、2番目の引数を文字列にすることはできなくなりました。 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'

私はこれをインポートエラーにたどり着いたと信じており、現在調査中です。

27
AMadinger

私の質問に対する答えを見つけました。それは確かにインポートエラーでした。 Django 1.10の場合、アプリのview.pyをインポートし、引用符なしでurl()の2番目の引数を渡す必要があります。次のコードは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-個別のアプリからビューをインポートする

50
AMadinger

以下を使用できるはずです。

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などの相対インポートを使用するのは、ファイルが互いに同じフォルダーにある場合です。

8
Joey Wilhelm

すべての関数をインポートしてリストし、各関数を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),
]
2
Harun ERGUL