新しい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'
私はこれをインポートエラーにたどり着いたと信じており、現在調査中です。
私の質問に対する答えを見つけました。それは確かにインポートエラーでした。 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-個別のアプリからビューをインポートする
以下を使用できるはずです。
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),
url(r'^$', function2),
url(r'^$', function3),
]