Pergunta

Eu sou ferramentas ao redor com Django e eu estou querendo saber se existe uma maneira simples de criar um link "de volta" à página anterior utilizando o sistema de template.

I figura que, no pior caso, posso obter essa informação a partir do objeto solicitação na função de visualização, e passá-lo para o método de renderização modelo, mas eu estou esperando que eu possa evitar a todo o código este clichê de alguma forma.

Eu verifiquei os documentos modelo Django e eu não vi nada que menciona isso explicitamente.

Foi útil?

Solução

Bem, você pode habilitar:

'django.core.context_processors.request',

em seu bloco de settings.TEMPLATE_CONTEXT_PROCESSORS e gancho para fora a referência, mas isso é um pouco nauseante e poderia quebrar todo o lugar.

A maioria dos lugares onde você iria querer isso (por exemplo, a página de edição post sobre SO) você tem um objeto real para ligar para (nesse exemplo, o post), assim você pode facilmente descobrir o que a página anterior adequada deve ser .

Outras dicas

Na verdade, é go(-1).

<input type=button value="Previous Page" onClick="javascript:history.go(-1);">

Esta solução funcionou para mim:

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

Mas isso anteriormente adicionando 'django.core.context_processors.request', para TEMPLATE_CONTEXT_PROCESSORS nas configurações do seu projeto.

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

|escape para sair do "" stringage

Para um botão 'voltar' em formas de mudança para Django administrador que eu acabar fazendo é um filtro de modelo personalizado para analisar e decodificar a variável 'preserved_filters' no modelo. Eu coloquei o seguinte em uma templates / admin / arquivo personalizado submit_line.html:

<a href="../{% if original}../{% endif %}?{{ preserved_filters | decode_filter }}">
    {% trans "Back" %}
</a>

E, em seguida, criou um filtro de modelo personalizado:

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)

Você sempre pode usar a opção do lado do cliente que é muito simples:

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

Usando solução do lado do cliente seria a solução adequada.

<a href="javascript:history.go(-1)" class="btn btn-default">Cancel</a>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top