Шаблоны Django: создать ссылку "Назад"?

я орудую вокруг с Джанго и мне интересно, есть ли простой способ создать ссылку "Назад" на предыдущую страницу с помощью системы шаблонов.

Я полагаю, что в худшем случае я могу получить эту информацию из объекта запроса в функции view и передать ее методу рендеринга шаблона, но я надеюсь, что смогу каким-то образом избежать всего этого шаблонного кода.

Я проверил документы шаблона Django, и я не видел ничего, что упоминает об этом явно.

7 ответов


Ну вы можете включить:

'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', to TEMPLATE_CONTEXT_PROCESSORS в настройках проекта.


для кнопки "Назад" в формах изменения для администратора Django то, что я в конечном итоге делаю, - это пользовательский фильтр шаблонов для разбора и декодирования переменной "preserved_filters" в шаблоне. Я разместил следующее на настраиваемых шаблонах / 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)

вы всегда можете использовать опцию на стороне клиента, которая очень проста:

<a href="javascript:history.go(1)">Back</a>

использование решения на стороне клиента было бы правильным решением.

<a href="javascript:history.go(-1)" class="btn btn-default">Cancel</a>

<a href="{{request.META.HTTP_REFERER|escape}}">Back</a>

|escape чтобы выйти из "" stringage