web-dev-qa-db-ja.com

Django.urls.pathのnameパラメータの機能は何ですか?

Urls.pyファイル内にパスを作成するとき、多くの場合これを行います:

urlpatterns = [
    path('foo/',views.FooView,name='bar'),
]

私はDjangoの初心者ですが、path関数内のnameパラメーターの機能はまだ見ていません。このパラメータは何のためのものですか?Djangoを利用したWebサイト内でどのように効果的に使用できますか?要するに、このパラメーターは何をするのですか、そしてパスを作成するときに含めることが重要なのはなぜですか?ありがとう!

17
Orangft

ビューに名前を付けて、URLではなく名前で参照できるようにすることが必要な場合があります。これにより、アプリでURLが変更された場合でも、コードを1か所で更新するだけで済みます(urls.pyモジュール)。ハードコードされたURLではなく名前を使用した既存のコードを更新する必要はありません。

たとえば、 reverse ユーティリティ関数はこの名前を受け入れ、URLを返します。

from Django.urls import reverse
reverse('bar')

名前を使用しない場合、ルートの移動は面倒です。すべてのテンプレートとコード全体でURLを見つけて更新する必要があります。

14
wim

FooViewを参照するURLを記述する必要があると想像してください。

<a href="/foo/">link</a>

ただし、後で気が変わってこのビューにqux/を使用したい場合は、問題が発生する可能性があります。したがって、URLを書き換えると、大量の書き換えが発生する可能性があります。また、URLにparametersが含まれていると面倒です。 pkおよびtypeパラメータ(foo/<pk>/qux/<type>など)を含むURLがあるとすると、フォーマットを覚えておく必要があり、フォーマットについて理由があり、面倒です: " それは/foo/1/qux/2または/foo/2/qux/1ですか?」.

したがって、これらのURLを直接記述する必要はありません。決定これら:いくつかの識別子と0個以上のパラメーターに基づいてURLを計算します。パスに名前を定義することで、最初にそのような識別子を定義する必要があり、そのようなパスの名前を定義できます。

これで、テンプレートで{% url .. %}テンプレートタグを次のように使用できるようになりました。

<a href="{% url 'bar' %}">link</a>

Djangoは計算を行い、正しいURLに置き換えます。これにより、頭痛の種が減るだけでなく、URLが正しいことが保証されます(もちろん、名前自体が正しいことを前提とします)。したがって、HTML出力をレンダリングする場合、{% url .. %}タグが名前を見つけられない場合、または大文字と小文字を区別しないため、URLの1つにタイプミスを書いた可能性があることを心配する必要はありません。パラメータが一致しません。

たとえば、ページにredirectしたい場合も同じようにできます。 barにリダイレクトする特定のビューがある場合、次のようになります。

def redirect_view(request):
    return redirect('bar')

繰り返しになります。後でURLが変更された場合、またはたとえば誰かがtranslated URLを実装したい場合(たとえば、サーバーを英語で実行し、1つをロシア語で実行できます)、これらのURLは正しい翻訳になります。

URLに次のようなパラメータが含まれている場合:

urlpatterns = [
    path('foo/<int:pk>/edit',views.FooView,name='bar'),
]

このパラメーターも使用できます。テンプレートでは次のようになります。

<a href="{% url 'bar' pk=2 %}">link</a>

またはビューで:

def redirect_view(request):
    return redirect('bar', pk=2)

そのパラメーターがURLにどのように適合するかは問題ではありません。 Djangoは、これ自体を見つけます。

6