Вопрос

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

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

Я проверил документы шаблона 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>

|escape чтобы выбраться из "" веревки

Для кнопки "назад" в change forms для Django admin то, что я в конечном итоге делаю, - это пользовательский фильтр шаблона для анализа и декодирования переменной '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)

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

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

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

<a href="javascript:history.go(-1)" class="btn btn-default">Cancel</a>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top