私はDjangoを使ってツールを使っていますが、テンプレートシステムを使用して前のページへの「戻る」リンクを作成する簡単な方法があるかどうか疑問に思っています。
最悪の場合、view関数のrequestオブジェクトからこの情報を取得し、それをテンプレートレンダリングメソッドに渡すことができると思いますが、このボイラープレートコードをなんとかして回避できることを望んでいます。
Djangoテンプレートのドキュメントを確認しましたが、これについて明示的に言及しているものは見当たりません。
実際にはそれ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
有効にできます:
'django.core.context_processors.request',
あなたのsettings.TEMPLATE_CONTEXT_PROCESSORS
ブロックでリファラーをフックアウトしますが、それは少し厄介で、至る所で壊れる可能性があります。
これが必要なほとんどの場所(たとえば、SOの投稿ページの編集)には、実際のオブジェクト(この例では投稿)をフックして、適切な前のページがどうあるべきかを簡単に理解できるようにします。
非常にシンプルなクライアント側オプションをいつでも使用できます。
<a href="javascript:history.go(1)">Back</a>
クライアント側のソリューションを使用することが適切なソリューションです。
<a href="javascript:history.go(-1)" class="btn btn-default">Cancel</a>
Django管理者の変更フォームの「戻る」ボタンの場合、テンプレートの「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)