web-dev-qa-db-ja.com

Django:パラメーターを含む現在のページのURLをテンプレートで取得します

Django=テンプレートで現在のページURLとそのすべてのパラメーターを取得する方法はありますか?

たとえば、/foo/bar?param=1&baz=2のような完全なURLを出力するテンプレートタグ

56
Matt Hampel

カスタムコンテキストプロセッサを記述します。例えば.

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 }}を使用できますテンプレート。

見る:

71
Sam Dolan

Djangoのビルドコンテキストプロセッサを使用して、テンプレートコンテキストで要求を取得します。設定でrequestプロセッサをTEMPLATE_CONTEXT_PROCESSORSに追加します

TEMPLATE_CONTEXT_PROCESSORS = (

    # Put your context processors here

    'Django.core.context_processors.request',
)

そして、テンプレートの使用:

{{ request.get_full_path }}

この方法では、新しいコードを自分で記述する必要はありません。

22
Mariusz Jamro

ファイル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}}
8
eruciform

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//になります)。

1
oblalex

URLが他のURLと異なるかどうかを確認できます。

{% if 'foo/bar/' in request.get_full_path %}
1
sammarxz

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 }}
1
Rafael Lopes