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>
"" stringage から抜け出すために、 |escape
私がやって結局何Djangoのadminの変更フォームでの「戻る」ボタンについて解析し、テンプレートで「preserved_filters」変数をデコードするためのカスタムテンプレートフィルタです。
:私は、カスタマイズされたテンプレート/管理/ 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)
あなたはいつも非常に簡単で、クライアント側のオプションを使用することができます:
<a href="javascript:history.go(1)">Back</a>
クライアント側のソリューションを使用すると、適切な解決策になります。
<a href="javascript:history.go(-1)" class="btn btn-default">Cancel</a>