django 2.0のurls.pyでpath()またはurl()を使用する方が良いですか?


131

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()関数で動作しないようです。path(r'^$', views.index, name="index")mysite.com/polls/

path()正規表現なしで使用していますか?でurl()、より強力な彼らが使用しているので、より複雑path()で私たちを開始するには?それとも、仕事ごとに異なるツールの場合ですか?


2
チュートリアルをフォローしている場合は、とを切り替える際の間違いを防ぐために、チュートリアルで使用されているスタイルを使用path()url()ます。あなたがしたいか、正規表現を使用する必要がある場合は、使用する必要がありますre_path()url()。それ以上は、どれを選ぶかはあなた次第だと思います。
Alasdair 2017

回答:


174

urlの Djangoドキュメントから

url(regex, view, kwargs=None, name=None)この関数はのエイリアスdjango.urls.re_path()です。将来のリリースでは非推奨になる可能性があります。

との主な違いはpath、正規表現なしのルートre_pathpath使用することです

あなたは使用することができre_path、複雑な正規表現の呼び出しのためだけに使用pathシンプルなルックアップに


1
詳細情報をありがとう!re_pathそのときに私が探しているものです。
FrostedCookies 2017

65

新しい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

URLconfのdjango docをさらに読むには


10
このpath()例では4桁以外の数字を使用できるため、少し誤解を招く可能性があります。
BrainCore

/<int:year>/今年は整数にする必要がありますが意味は、私はあなたが公式ドキュメントに目を通す示唆しています。
Sylvernus Akubo

2
@silvablaze BrainCoreが述べたように、はとint同等ではありません[0-9]{4}。整数に使用されるかどうかは、この関係には関係ありません。あなたが交換した場合、おそらく[0-9]{4}[0-9]+あなたの比較あなたはまだ最終的な結果のタイプ(int型対STR?)に対処する必要があるかもしれませんが、あまり不正確かもしれません。
Jan Kyu Peblik

それがこのテーマに関する明確な答えです。ありがとう。
VikasBhat

19

pathほんの数週間前にリリースされたDjango 2.0の新機能です。ほとんどのチュートリアルは、新しい構文に合わせて更新されていません。

それは確かに物事を行うためのより簡単な方法であるはずでした。URLの方が強力だとは言いませんが、どちらの形式でもパターンを表現できるはずです。


9

正規表現はpath()、次の引数を持つ関数では機能しないようですpath(r'^$', views.index, name="index")

次のようになりますpath('', views.index, name="index")

正規表現を入力するには、最初の引数を空白にする必要があります。


2
はい、REを使用するには上記で指摘したように、代わりにre_path()関数を使用する必要があると思います。
FrostedCookies


2

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の関数です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.