web-dev-qa-db-ja.com

Djangoテンプレート:「戻る」リンクを作成しますか?

Django を使ってツールを使っていますが、テンプレートシステムを使用して前のページへの「戻る」リンクを作成する簡単な方法があるかどうか疑問に思っています。

最悪の場合、ビュー関数のリクエストオブジェクトからこの情報を取得し、それをテンプレートレンダリングメソッドに渡すことができると思いますが、この定型コードをなんとかして回避できることを望んでいます。

Djangoテンプレートドキュメントを確認しましたが、これについて明示的に言及しているものは何も見ていません。

25
TM.

有効にできます:

'Django.core.context_processors.request',

あなたのsettings.TEMPLATE_CONTEXT_PROCESSORSリファラーをブロックしてフックアウトしますが、それは少し厄介で、至る所で壊れる可能性があります。

これが必要なほとんどの場所(SOの投稿の編集ページなど)には、フックする実際のオブジェクト(この例では投稿)があるため、適切な前のページがどうあるべきかを簡単に理解できます。

12
Oli

実際にはgo(-1)です。

<input type=button value="Previous Page" onClick="javascript:history.go(-1);">
36
mcwong

この解決策は私のためにうまくいきました:

<a href="{{request.META.HTTP_REFERER}}">Go back</a>

ただし、これは以前、プロジェクトの設定で'Django.core.context_processors.request',TEMPLATE_CONTEXT_PROCESSORSに追加していました。

26
Pegasus
<a href="{{request.META.HTTP_REFERER|escape}}">Back</a>

|escape ""文字列から抜け出す

4

「戻る」が通常1レベル上に行くことを意味するRESTfulリンクの場合:

<a href="../"><input type="button" value="Back" class="btn btn-primary" /></a>
1
Carlo Ledesma

非常に単純なクライアント側オプションをいつでも使用できます。

<a href="javascript:history.go(1)">Back</a>
1
nivhab

クライアント側のソリューションを使用することが適切なソリューションになります。

<a href="javascript:history.go(-1)" class="btn btn-default">Cancel</a>
0
Abdul Gaffar

Django adminの変更フォームの「戻る」ボタンの場合、最終的に行うのは、テンプレート内の「preserved_filters」変数を解析およびデコードするためのカスタムテンプレートフィルターです。以下をカスタマイズされたtemplates/admin/submit_line.htmlファイル:

<a href="../{% if original}../{% endif %}?{{ preserved_filters | decode_filter }}">
    {% trans "Back" %}
</a>

次に、カスタムテンプレートフィルターを作成しました。

from urllib.parse import unquote
from Django import template

def decode_filter(variable):
    if variable.startswith('_changelist_filters='):
        return unquote(variable[20:])
    return variable

register = template.Library()
register.filter('decode_filter', decode_filter)
0
Erasmo