1. ホーム
  2. django

[解決済み] Django を使って現在の url 名を取得する方法は?

2023-01-05 09:48:05

質問

私は、現在のURLに従って動的にURLを構築する必要があります。を使用して {% url %} タグはそれを行うための最も簡単な方法ですが、私は新しいものを動的に生成するために、現在のURLの名前が必要です。

どのように私は現在のビューにつながるurlconfに添付されたURLの名前を取得することができますか?

EDIT : 私は、手動で get_absolute_url を使って手動で作ることもできますが、これは講義の一部であり、URLを作成する唯一の方法を示したいと思っているので、それは避けたいと思っています。

生徒たちは {% url %} . 彼らは、現在のURLに基づいてより完全なURLを生成しなければならないときに問題に直面していることを知っています。最も簡単な方法は {% url %} を使うことです。私たちは url という名前を持っているので という名前が付いているので、現在のビューを呼び出した url の名前を取得する方法を知る必要があります。

編集2:もう一つのユースケースは、ベーステンプレートの一部を、ベーステンプレートに応じて異なる形で表示することです。CSSや{% block %}を使用する方法もありますが、ビュー名がリンクに一致する場合、base.htmlのメニューエントリのタグを削除することができれば、それだけで良い場合があります。

どのように解決するのですか?

この機能がいつから Django の一部になっているのか知りませんが、Django では に続く記事 が示すように、ビューで以下のように実現することができます。

   from django.core.urlresolvers import resolve
   current_url = resolve(request.path_info).url_name

もし、すべてのテンプレートでそれが必要なら、テンプレートリクエストを書くのが適切でしょう。

編集: DJANGOのアップデートを適用する

現在のDjangoのアップデートを踏襲しています。

Django 1.10 ( リンク )

<ブロッククオート

からのインポート django.core.urlresolvers モジュールからのインポートは非推奨です。 からのインポートは推奨されません。 django.urls

Django 2.0 ( リンク )

<ブロッククオート

その django.core.urlresolvers モジュールは削除され、代わりに新しい の場所に移動します。 django.urls .

よって、正しいやり方はこのようになります。

from django.urls import resolve
current_url = resolve(request.path_info).url_name