django.urlsユーティリティ機能
reverse()
コードで:ttag: `url` テンプレートタグに似たものを使用する必要がある場合、Djangoは次の関数を提供します。
- reverse(viewname, urlconf=None, args=None, kwargs=None, current_app=None)
viewname
は、 URLパターン名または呼び出し可能なビューオブジェクトにすることができます。 たとえば、次のurl
があるとします。
次のいずれかを使用して、URLを逆にすることができます。
URLが引数を受け入れる場合は、args
でそれらを渡すことができます。 例えば:
args
の代わりにkwargs
を渡すこともできます。 例えば:
args
とkwargs
を同時にreverse()
に渡すことはできません。
一致するものがない場合、reverse()
は NoReverseMatch 例外を発生させます。
reverse()
関数は、URLのさまざまな正規表現パターンを逆にすることができますが、すべての可能なパターンを逆にすることはできません。 現時点での主な制限は、縦棒("|"
)文字を使用した代替選択肢をパターンに含めることができないことです。 このようなパターンを使用して、受信URLと照合し、ビューに送信することはできますが、そのようなパターンを元に戻すことはできません。
current_app
引数を使用すると、現在実行中のビューが属するアプリケーションを示すヒントをリゾルバーに提供できます。 このcurrent_app
引数は、名前空間URL解決戦略に従って、アプリケーション名前空間を特定のアプリケーションインスタンス上のURLに解決するためのヒントとして使用されます。
urlconf
引数は、反転に使用するURLパターンを含むURLconfモジュールです。 デフォルトでは、現在のスレッドのルートURLconfが使用されます。
ノート
reverse()
によって返される文字列は、すでに urlquoted です。 例えば:
reverse()
の出力にさらにエンコード(urllib.parse.quote()
など)を適用すると、望ましくない結果が生じる可能性があります。
reverse_lazy()
reverse()の遅延評価バージョン。
- reverse_lazy(viewname, urlconf=None, args=None, kwargs=None, current_app=None)
これは、プロジェクトのURLConfがロードされる前にURL反転を使用する必要がある場合に役立ちます。 この機能が必要な一般的なケースは次のとおりです。
- ジェネリッククラスベースビューの
url
属性として逆URLを提供します。 - デコレータに逆URLを提供します( django.contrib.auth.decorators.permission_required()デコレータの
login_url
引数など)。 - 関数のシグニチャのパラメータのデフォルト値として逆URLを提供します。
resolve()
resolve()
関数は、対応するビュー関数へのURLパスを解決するために使用できます。 次の署名があります。
- resolve(path, urlconf=None)
path
は、解決するURLパスです。 reverse()と同様に、urlconf
パラメーターについて心配する必要はありません。 この関数は、解決されたURLに関するさまざまなメタデータにアクセスできる ResolverMatch オブジェクトを返します。
URLが解決されない場合、関数は Resolver404 例外( Http404 のサブクラス)を発生させます。
- class ResolverMatch
- func
URLを提供するために使用されるビュー機能
- args
URLから解析されたときにview関数に渡される引数。
- kwargs
URLから解析されたときにview関数に渡されるキーワード引数。
- url_name
URLに一致するURLパターンの名前。
- route
バージョン2.2の新機能。
一致するURLパターンのルート。
たとえば、
path('users/<id>/', ...)
が一致するパターンである場合、route
には'users/<id>/'
が含まれます。
- app_name
URLに一致するURLパターンのアプリケーション名前空間。
- app_names
URLに一致するURLパターンの完全なアプリケーション名前空間内の個々の名前空間コンポーネントのリスト。 たとえば、
app_name
が'foo:bar'
の場合、app_names
は['foo', 'bar']
になります。
- namespace
URLに一致するURLパターンのインスタンス名前空間。
- namespaces
URLに一致するURLパターンの完全なインスタンス名前空間内の個々の名前空間コンポーネントのリスト。 つまり、名前空間が
foo:bar
の場合、名前空間は['foo', 'bar']
になります。
- view_name
URLに一致するビューの名前(名前空間がある場合はそれを含む)。
次に、 ResolverMatch オブジェクトに問い合わせて、URLに一致するURLパターンに関する情報を提供できます。
ResolverMatch オブジェクトをトリプルに割り当てることもできます。
resolve()の1つの可能な使用法は、ビューにリダイレクトする前に、ビューがHttp404
エラーを発生させるかどうかをテストすることです。
get_script_prefix()
- get_script_prefix()
通常、アプリケーション内のURLを定義するには、常に reverse()を使用する必要があります。 ただし、アプリケーションがURL階層自体の一部を構築する場合は、URLを生成する必要がある場合があります。 その場合、Webサーバー内でDjangoプロジェクトのベースURLを見つけることができる必要があります(通常、 reverse()がこれを処理します)。 その場合、get_script_prefix()
を呼び出すことができます。これにより、DjangoプロジェクトのURLのスクリプトプレフィックス部分が返されます。 DjangoプロジェクトがそのWebサーバーのルートにある場合、これは常に"/"
です。