web-dev-qa-db-ja.com

Django 2.0ではurls.pyのpath()かurl()を使うのが良いですか?

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()を使って始めましょうか。それとも別の仕事のための別のツールの場合ですか?

84
FrostedCookies

Djangoのドキュメントから url

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

pathre_path の主な違いは、pathは正規表現なしでrouteを使うことです。

複雑な正規表現の呼び出しにはre_pathを使い、簡単な検索にはpathを使うことができます。

110
iklinac

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

40
silva blaze

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

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

15
Daniel Roseman

パスはDjango 2.0の新機能です。ここで説明します: https://docs.djangoproject.com/en/2.0/releases/2.0/#whats-new-2-0

もっとPythonicな方法のように見え、引数に正規表現を使わないことを可能にします…あなたは例としてint()関数を使うことができます。

6
Denis Cottin

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

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

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

5
Danish Shaikh

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

0
Nani Chintha