Шаблоны 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>