Шаблоны Django: создать ссылку "назад"?
Я использую Django, и мне интересно, есть ли простой способ создать ссылку "назад" на на предыдущей странице с использованием системы шаблонов.
Я полагаю, что в худшем случае я могу получить эту информацию из объекта запроса в функции просмотра и передать ее методу визуализации шаблона, но я надеюсь, что смогу избежать этого шаблона. p >
Я проверил документацию по шаблону Django, и я не видел ничего, что упоминает это явно.
Ответы
Ответ 1
Ну вы можете включить:
'django.core.context_processors.request',
в вашем блоке settings.TEMPLATE_CONTEXT_PROCESSORS
и подключите реферер, но немного тошнотворный и может сломаться повсюду.
В большинстве мест, где вы хотели бы этого (например, на странице редактирования сообщений на SO), у вас есть реальный объект для подключения к (в этом примере, сообщение), поэтому вы можете легко определить, какова должна быть предыдущая предыдущая страница.
Ответ 2
На самом деле это go(-1)
.
<input type=button value="Previous Page" onClick="javascript:history.go(-1);">
Ответ 3
Это решение получилось для меня:
<a href="{{request.META.HTTP_REFERER}}">Go back</a>
Но это ранее добавление 'django.core.context_processors.request',
в TEMPLATE_CONTEXT_PROCESSORS
в ваши настройки проекта.
Ответ 4
Вы всегда можете использовать опцию клиентской стороны, которая очень проста:
<a href="javascript:history.go(1)">Back</a>
Ответ 5
Для кнопки "назад" в формах изменений для администратора Django то, что я делаю, является настраиваемым фильтром шаблонов для синтаксического анализа и декодирования переменной "preserve_filters" в шаблоне. Я поместил следующее в файле customplates/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)
Ответ 6
Использование решения на стороне клиента будет правильным решением.
<a href="javascript:history.go(-1)" class="btn btn-default">Cancel</a>