Django Cómo implementar alert()(mensaje emergente) después de completar el método en vista

Me gustaría tener un alert() mensaje (como en javascript) después de método en view.py se completa

Mi método es

def change_password(request):
    dictData = getInitialVariable(request)

    in_username = request.POST['txt_username']
    in_password = request.POST['txt_password']
    in_new_password = request.POST['txt_new_password']


    user = authenticate(username=in_username, password=in_password)
    if user is not None:
        if user.is_active:
            u = User.objects.get(username=in_username)
            u.set_password(in_new_password)
            u.save()

            # Redirect to a success page.
            return HttpResponseRedirect('/profiles/'+in_username)

Después de que u se guarda en la base de datos, la ventana emergente se muestra el mensaje.
¿Cómo puedo implementar?

3 Kommentare

  1. 8

    Creo que la mejor solución sería la de mensajes (docs)

    Como se describe en los niveles de mensaje docs Django sugiere el uso de «INFORMACIÓN» a nivel de mensajes para comunicarse con los usuarios.

    Por defecto están habilitados los mensajes en Django. Si mi ejemplo no funciona para usted como usted debe comprobar habilitar los mensajes de bloque

    Ver la parte:

    from django.contrib import messages
    
    def change_password(request):
       ...your stuff...
    
       messages.info(request, 'Your password has been changed successfully!')
       return HttpResponseRedirect('/profiles/'+in_username)

    Parte de la plantilla:

    {% if messages %}
    <ul class="messages">
        {% for message in messages %}
        <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
        {% endfor %}
    </ul>
    {% endif %}

    Puede pegar masaje de salida en la perspectiva específica o, en general, las plantillas de diseño/header).

  2. 3

    Hay muchas maneras de hacer esto bien (ver «flash» en Bootstrap, por ejemplo)… pero aquí es cómo hacerlo, literalmente, lo que usted pregunta.

    En la vista que redirigir a, pasar un mensaje de valor a su plantilla:

    return render_to_response('template_name', message='Save complete')

    Y en su plantilla, añadir este script:

    <script>
        alert('{{ message }}');
    </script>
    • HttpResponseRedirect es un HTTP Redirección 301 de modo que la plantilla no puede ser proporcionada.
    • Ack, buen punto. La actualización de leer «en la vista de redirigir a».
  3. -2

    Simplemente redirigir a /perfiles/in_username/password_updated lugar

    usted podría utilizar una plantilla de HTML en /perfiles/in_username/password_updated:

    Esta plantilla redefine el que se utiliza en /perfiles/in_username y agregar un javascript con alerta

    <!DOCTYPE html>
    <html lang="en">
    <body>
    <script>
    alert("Your message");
    </script>
    [...]
    </body>
    </html>

    Simplemente utilizar render_to_response en ese punto de vista:

    from django.shortcuts import render_to_response
    return render_to_response('mytemplate.html', {"in_username": in_username});

    Ver https://docs.djangoproject.com/en/1.7/topics/templates/ para obtener más información sobre plantillas.

    • Este es un mal consejo. Siempre redirigir después de una exitosa POST.
    • Tienes razón, he editado mi post

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea