templates Django: criar um link “volta”?
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.
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>