Dai a resposta a uma URL redirecionada no Django
-
19-09-2019 - |
Pergunta
Em um cenário formulário de inscrição, o formulário é pós para "/ enviar". Eu quero redirecionar o usuário "sucess /" no sucesso e passar prestar algum mensagem para um modelo no novo url. Como fazer isso no Django? render_to_response não faz redirecionamento e HttpResponseRedirect não faz renderização modelo.
Solução
Se a sua página de sucesso precisa de uma mensagem dinâmica, você precisa passá-lo lá de alguma forma. Você pode fazer isso através de parâmetros GET na URL que você está redirecionam para - por exemplo return HttpResponseRedirect('/success/?msg=My+success+message+here')
-. Ou ajustando alguns valores na sessão, que a visão de sucesso pode pegar
Outras dicas
A resposta de Daniel Roseman é potencialmente perigoso , abrindo o seu site para vulnerabilidades XSS.
Certifique-se de retirar tags HTML de qualquer mensagem é passada se você deve fazê-lo desta forma.
A melhor maneira seria para redirecionar para / sucesso / msg = ok, e tem em sua vista de um dicionário:?
{ 'ok': 'Your success message' }
A melhor maneira de fazer o que você quer é: Na sua opinião definir a mensagem de sucesso (ou mensagem de erro) como um dicionário. E usar o render_to_response para exibir qualquer modelo.
No seu modelo, você pode verificar se há uma mensagem e se a mensagem é uma mensagem de erro ou uma mensagem de sucesso.
Alguns, como este: Na sua opinião:
if anyError:
dict = {"message" : {"error" : "The error message"}}
else:
dict = {"message" : {"success" :"The success message"}}
em seu modelo:
{% if message %}
{% if message.error %}
{{ message.error }}
{% else %}
{{ message.success }}
{% endif %}
{% endif %}
espero ter ajudado
Não há nenhuma boa maneira de fazer o que quiser. O navegador envia o formulário, que levará o usuário para / enviar. Depois de decidir se é "bem-sucedida", que seja tarde demais; o navegador já decidiu sobre o seu destino. Tudo o que você pode fazer é redirecionamento. Mas, como você está encontrando para fora, ele vai ser difícil manter seu estado POST quando você redirecionar.
Eu iria desistir sobre isso. Não é como os sites devem funcionar.
Eu acho Django faz isso já se estender a vista genérico . Em criar há um argumento "post_save_redirect" opcional. Esta funcionalidade é usada no sistema de administração do Django gerado automaticamente. Por exemplo, se você quiser um novo recurso, dizem usuário, você ir para a url "/ user / add". Depois de submetê-lo redireciona para "/ user / 1" com uma mensagem de sucesso "você acabou de salvar usuário # 1". Então, isso é possível, mas eu ainda estou pesquisando como fazê-lo sem estender o ponto de vista genérico. Eu ainda sou muito novo para Django e Python, então olhando através do núcleo Django para encontrar como eles fizeram isso não é tão fácil para mim.
Eu recomendaria usar framework Django mensagem que é usado para mensagens de notificação de uma só vez.
https://docs.djangoproject.com/en/1.8/ref / contrib / mensagens /