Djangoのオンラインコースでは、講師はurl()
関数を使ってビューを呼び出し、urlpatternsリストの正規表現を利用します。私はこれのYouTubeで他の例を見ました。例えば.
from Django.contrib import admin
from Django.urls import include
from Django.conf.urls import url
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^polls/', include('polls.urls')),
]
#and in polls/urls.py
urlpatterns = [
url(r'^$', views.index, name="index"),
]
しかし、Djangoのチュートリアルでは、代わりにpath()
を使います。
from Django.urls import path
from . import views
urlpatterns = [
path('', views.index, name="index"),
]
さらに、path()
を使用してもmysite.com/polls/
ビューが見つからないため、正規表現はpath(r'^$', views.index, name="index")
関数では機能しないようです。
正規表現なしでpath()
を使うのは正しいやり方ですか? url()
はもっと強力ですがもっと複雑なので、path()
を使って始めましょうか。それとも別の仕事のための別のツールの場合ですか?
新しい Django.urls.path()
関数は、よりシンプルで読みやすいURLルーティング構文を可能にします。例えば、これは以前のDjangoリリースからの例です。
url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive)
次のように書くことができます。
path('articles/<int:year>/', views.year_archive)
以前のバージョンのDjango.conf.urls.url()
関数は、 Django.urls.re_path()
として使用できるようになりました。差し迫った廃止予定なしに、古い場所は後方互換性のために残っています。古いDjango.conf.urls.include()
関数はDjango.urls
からインポートできるようになりました。
from Django.urls import include, path, re_path
URLconfs にあります。さらに読むために Django doc
path
はDjango 2.0の新機能で、ほんの数週間前にリリースされました。ほとんどのチュートリアルは新しい構文に合わせて更新されていません。
それは確かに物事のより簡単な方法であることになっていました。 URLの方が強力だとは思いませんが、どちらの形式でもパターンを表現できるはずです。
パスはDjango 2.0の新機能です。ここで説明します: https://docs.djangoproject.com/en/2.0/releases/2.0/#whats-new-2-0
もっとPythonicな方法のように見え、引数に正規表現を使わないことを可能にします…あなたは例としてint()関数を使うことができます。
正規表現は、次の引数を持つpath()
関数では機能しないようです:path(r'^$', views.index, name="index")
。
path('', views.index, name="index")
のようになります。
正規表現を入力するには、最初の引数を空白にする必要があります。
V2.0以降、多くのユーザーがパスを使用していますが、パスまたはURLを使用できます。たとえばDjango 2.1.1では、urlを使った関数へのマッピングは次のようにすることができます。
from Django.contrib import admin
from Django.urls import path
from Django.contrib.auth import login
from posts.views import post_home
from Django.conf.urls import url
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^posts/$', post_home, name='post_home'),
]
postsはアプリケーションで、post_homeはviews.pyの中の関数です。