Шаблоны Django: создать «обратную» ссылку? - PullRequest
20 голосов
/ 08 февраля 2009

Я использую Django , и мне интересно, есть ли простой способ создать "обратную" ссылку на предыдущую страницу с помощью системы шаблонов.

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

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

Ответы [ 7 ]

31 голосов
/ 20 марта 2009

На самом деле это go(-1).

<input type=button value="Previous Page" onClick="javascript:history.go(-1);">
22 голосов
/ 11 ноября 2014

Это решение сработало для меня:

<a href="{{request.META.HTTP_REFERER}}">Go back</a>

Но это уже добавление 'django.core.context_processors.request', к TEMPLATE_CONTEXT_PROCESSORS в настройках вашего проекта.

12 голосов
/ 08 февраля 2009

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

'django.core.context_processors.request',

в вашем settings.TEMPLATE_CONTEXT_PROCESSORS блоке и подключите реферера, но это немного тошнотворно и может сломаться повсюду.

В большинстве мест, где вы захотите это (например, редактировать страницу поста на SO), у вас есть реальный объект, чтобы зацепить (в этом примере пост), чтобы вы могли легко определить, какой должна быть предыдущая страница. .

2 голосов
/ 05 июня 2018
<a href="{{request.META.HTTP_REFERER|escape}}">Back</a>

|escape чтобы выйти из "" строки "

0 голосов
/ 28 сентября 2016

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

<a href="javascript:history.go(-1)" class="btn btn-default">Cancel</a>
0 голосов
/ 11 августа 2016

Для кнопки «назад» в формах изменений для администратора 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)
0 голосов
/ 18 марта 2009

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

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