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.

Foi útil?

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 /

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top