Django を使ってツールを使っていますが、テンプレートシステムを使用して前のページへの「戻る」リンクを作成する簡単な方法があるかどうか疑問に思っています。
最悪の場合、ビュー関数のリクエストオブジェクトからこの情報を取得し、それをテンプレートレンダリングメソッドに渡すことができると思いますが、この定型コードをなんとかして回避できることを望んでいます。
Djangoテンプレートドキュメントを確認しましたが、これについて明示的に言及しているものは何も見ていません。
有効にできます:
'Django.core.context_processors.request',
あなたのsettings.TEMPLATE_CONTEXT_PROCESSORS
リファラーをブロックしてフックアウトしますが、それは少し厄介で、至る所で壊れる可能性があります。
これが必要なほとんどの場所(SOの投稿の編集ページなど)には、フックする実際のオブジェクト(この例では投稿)があるため、適切な前のページがどうあるべきかを簡単に理解できます。
実際にはgo(-1)
です。
<input type=button value="Previous Page" onClick="javascript:history.go(-1);">
この解決策は私のためにうまくいきました:
<a href="{{request.META.HTTP_REFERER}}">Go back</a>
ただし、これは以前、プロジェクトの設定で'Django.core.context_processors.request',
をTEMPLATE_CONTEXT_PROCESSORS
に追加していました。
<a href="{{request.META.HTTP_REFERER|escape}}">Back</a>
|escape
""文字列から抜け出す
「戻る」が通常1レベル上に行くことを意味するRESTfulリンクの場合:
<a href="../"><input type="button" value="Back" class="btn btn-primary" /></a>
非常に単純なクライアント側オプションをいつでも使用できます。
<a href="javascript:history.go(1)">Back</a>
クライアント側のソリューションを使用することが適切なソリューションになります。
<a href="javascript:history.go(-1)" class="btn btn-default">Cancel</a>
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)