variable template tag get_template dirs django django-urls

tag - import django template



¿Cómo redirecciono en Django con contexto? (3)

Para ampliar la útil respuesta de Antoine: si desea procesar los mensajes en su módulo de vistas, en lugar de la plantilla:

from django.contrib.messages import get_messages def my_view(request): # Process your form data from the POST, or whatever you need to do # Add the messages, as mentioned above messages.add_message(request, messages.INFO, form.cleaned_data[''name'']) return HttpResponseRedirect(''/other_view_url/'') def other_view(request): storage = get_messages(request) name = None for message in storage: name = message break return render(request, ''general/other_view.html'', {''name'': name})

Tengo una vista que valida y guarda un formulario. Después de guardar el formulario, me gustaría redireccionar a una vista de lista de proyectos con un mensaje de éxito "el formulario para el cliente xyz se actualizó correctamente ..."

HttpResponseRedirect no parece funcionar, porque solo tiene un argumento para la url, no hay forma de pasar el diccionario con ella.

Intenté modificar mi contenedor para object_list para tomar un dict como parámetro que tiene el contexto necesario. Devuelvo una llamada a este contenedor desde el interior de la vista que guarda el formulario. Sin embargo, cuando se procesa la página, la url es ''/ customer_form /'' en lugar de ''/ list_customers /''. Traté de modificar el objeto de solicitud, antes de pasarlo al contenedor object_list, pero eso no funcionó.

Gracias.


request.user.message_set ha quedado obsoleto en Django 1.2 y se ha eliminado desde Django 1.4, en su lugar debería utilizarse el marco de mensajes .

from django.contrib import messages # messages.add_message(request, level, message, extra_tags='''', fail_silently=False) messages.add_message(request, messages.INFO, "Your Message")

Los mensajes se pueden representar en la plantilla con:

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


Tenga en cuenta que la respuesta sugerida aquí solo es aplicable a Django <1.2:

¿Tiene control sobre la vista a la que está redirigiendo? En ese caso, puede guardar el contexto en la sesión antes de redireccionar. La vista objetivo puede recoger el contexto (y eliminarlo) de la sesión y usarlo para representar la plantilla.

Si su único requisito es mostrar un mensaje, entonces hay una mejor manera de hacerlo. Su primera vista puede crear un mensaje para el actual usando auth y hacer que la segunda vista sea leída y eliminada. Algo como esto:

def save_form(request, *args, **kwargs): # all goes well message = _("form for customer xyz was successfully updated...") request.user.message_set.create(message = message) return redirect(''list_view'') def list_view(request, *args, **kwargs): # Render page # Template for list_view: {% for message in messages %} ... {% endfor %}

Los mensajes se guardan en la base de datos. Esto significa que puede acceder a ellos incluso después de una redirección. Se leen y borran automáticamente al renderizar la plantilla. Deberá usar RequestContext para que esto funcione.

Para Django => 1.2 lea la respuesta con mensajes