Django=テンプレートで現在のページURLとそのすべてのパラメーターを取得する方法はありますか?
たとえば、/foo/bar?param=1&baz=2
のような完全なURLを出力するテンプレートタグ
カスタムコンテキストプロセッサを記述します。例えば.
def get_current_path(request):
return {
'current_path': request.get_full_path()
}
TEMPLATE_CONTEXT_PROCESSORS
設定変数にその関数へのパスを追加し、次のようにテンプレートで使用します。
{{ current_path }}
すべてのリクエストで完全なrequest
オブジェクトを使用する場合は、組み込みの Django.core.context_processors.request
コンテキストプロセッサを使用し、その後で{{ request.get_full_path }}
を使用できますテンプレート。
見る:
Djangoのビルドコンテキストプロセッサを使用して、テンプレートコンテキストで要求を取得します。設定でrequest
プロセッサをTEMPLATE_CONTEXT_PROCESSORS
に追加します
TEMPLATE_CONTEXT_PROCESSORS = (
# Put your context processors here
'Django.core.context_processors.request',
)
そして、テンプレートの使用:
{{ request.get_full_path }}
この方法では、新しいコードを自分で記述する必要はありません。
ファイルcontext_processors.py(など)で:
def myurl( request ):
return { 'myurlx': request.get_full_path() }
Settings.pyで:
TEMPLATE_CONTEXT_PROCESSORS = (
...
wherever_it_is.context_processors.myurl,
...
Template.htmlで:
myurl={{myurlx}}
Sdolanの答えに加えて:
i18Nを使用していて、現在のページの言語を変更するためにnext
値を /i18n/setlang/
に渡したい場合は、現在の言語コードを削除する必要がありますフルパスのいずれか。何かのようなもの:
full_path = request.get_full_path()
current_path = full_path[full_path.index('/', 1):]
これは、すべてのパスのフォーマットが/LANG_CODE/any/other/stuff/with/?param='yay'
であり、それが何であれLANG_CODE
から始まることを前提としています(たとえば、/en/
は/
になります)。
URLが他のURLと異なるかどうかを確認できます。
{% if 'foo/bar/' in request.get_full_path %}
Djangoには多くの組み込み機能がありますが、何を使用するかを明示しないと使用されません。
したがって、MTVスキーマ(モデル、テンプレート、ビュー)では、ビューはリクエストを受け取り、テンプレートレンダリングを使用して応答を生成し、このビューの辞書またはすべてのローカル変数(locals()関数を使用)を渡します。これを知って、次のように応答から取得した現在のURLを挿入できます。
views.py:
from Django.shortcuts import render
def page(request):
currentUrl = request.get_full_path()
return render(request, 'app/page.html', locals())
次に、テンプレート 'app/page.html'で、次の操作を行うだけで、locals()を介して作成して渡したcurrentUrl変数を表示するだけです。
app/template/page.html:
{{ currentUrl }}