Soy nuevo en django (1.2.4). He creado algo de crud con vistas genéricas. Pero, ¿cómo puedo mostrar algo como "El alumno se agregó con éxito" cuando el alumno se crea utilizando el marco de mensajería de django?cómo enviar un mensaje de éxito si usamos vistas genéricas de django
Respuesta
Hasta donde yo sé, no hay una manera directa de hacerlo utilizando vistas genéricas tradicionales. Siempre sentí que faltaba documentación sobre visores genéricos y, por lo tanto, nunca los utilicé.
En teoría, podría usar un decorador suponiendo que una redirección significaba una presentación exitosa.
Por lo que podría escribir algo como esto (ninguna de este código ha sido probado):
urls.py:
try:
from functools import wraps
except ImportError:
from django.utils.functional import wraps
from django.http import HttpRedirectResponse
from django.contrib import messages
from django.views.generic import *
def add_message(success_message=None):
def decorator(func):
def inner(request, *args, **kwargs):
resp = func(request, *args, **kwargs)
if isinstance(resp, HttpRedirectResponse):
messages.success(request, message)
return resp
return wraps(func)(inner)
return decorator
student_info_edit = {
'template_name': 'myapp/student/form.html',
'template_object_name': 'student',
'form_class': studentForm,
}
student_info_new = {
'template_name': 'myapp/student/form.html',
'form_class': studentForm,
'post_save_redirect': '/myapp/students/',
}
urlpatterns += patterns('',
url(r'^students/$', list_detail.object_list, { 'queryset': Student.objects.all() }, name="students"),
url(r'^students/(?P<object_id>\d+)/$', add_message("Student record updated successfully")(create_update.update_object), student_info_edit, name="student_detail"),
url(r'^students/new$', add_message("The student was added successfully.")(create_update.create_object), student_info_new, name="student_new"),
)
Todo lo que dijo y codificada, Django 1.3 introdujo class-based generic views, por lo Si estás interesado en mudarte a Django 1.3, deberías investigarlos. Pueden permitir una mayor personalización, no estoy seguro.
A la larga, rara vez veo el formulario de beneficios con vistas genéricas, y esto se duplica para cosas como agregar/actualizar.
La funcionalidad que usted está pidiendo ya está implementado en las vistas genéricas de Django:
https://github.com/django/django/blob/1.2.X/django/views/generic/create_update.py#L115
podrás ver los mensajes de displaying messages en su plantilla principal.
Usted quiere actualizar las URL en esta respuesta, los enlaces están muertos – DeA
A partir de Django 1.6 +, utilizando cualquier class-based generic views, se puede confiar en la successMessageMixin. Es tan simple como agregar el mixin a su definición de clase y establecer el atributo success_message
a lo que desee.
Como mencionó Olivier Verdier, por favor recuerde display messages en su plantilla principal!
un ejemplo sencillo de la docs:
from django.contrib.messages.views import SuccessMessageMixin
from django.views.generic.edit import CreateView
from myapp.models import Author
class AuthorCreate(SuccessMessageMixin, CreateView):
model = Author
success_url = '/success/'
success_message = "%(name)s was created successfully"
un ejemplo más complejo:
from django.contrib.messages.views import SuccessMessageMixin
from django.views.generic.edit import CreateView
from myapp.models import ComplicatedModel
class ComplicatedCreate(SuccessMessageMixin, CreateView):
model = ComplicatedModel
success_url = '/success/'
success_message = "%(calculated_field)s was created successfully"
def get_success_message(self, cleaned_data):
# cleaned_data is the cleaned data from the form which is used for string formatting
return self.success_message % dict(cleaned_data,
calculated_field=self.object.calculated_field)
- 1. Extendiendo las vistas genéricas de Django
- 2. ¿Puedo filtrar en request.user cuando uso vistas genéricas de Django?
- 3. Vistas genéricas de Django: Cuándo usar ListView frente a DetailView
- 4. En inglés simple, ¿cuáles son las vistas genéricas de Django?
- 5. Vistas genéricas basadas en clase Django y autenticación
- 6. Uso de ASP.NET MVC con vistas genéricas
- 7. ¿Hay algo así como plantillas genéricas en django como vistas genéricas
- 8. Cómo mostrar un mensaje de éxito de JSF
- 9. ¿Cómo enviar un mensaje de sesión a un usuario anónimo en un sitio de Django?
- 10. Siguientes enlaces anteriores de un conjunto de consultas/vistas genéricas
- 11. ¿Cómo recupero un mensaje de éxito en Magento?
- 12. Drupal: Mostrar mensaje de error/éxito
- 13. ASP.NET MVC Mostrar mensaje de éxito
- 14. CQRS: ¿cuándo enviar un mensaje de confirmación?
- 15. Cómo enviar un mensaje usando XMPP Framework
- 16. Enviar un mensaje de texto de R
- 17. cómo enviar un mensaje al proceso principal
- 18. Vistas basadas en clase (genéricas) en Flask
- 19. select_related() en vistas genéricas basadas en clases
- 20. ¿Cómo mostrar el mensaje de "éxito" en el envío?
- 21. Vistas de clase en Django
- 22. Enviar mensaje en C#
- 23. ¿Cómo enviar un mensaje sin un destino específico en MPI?
- 24. Django - dos vistas, una página
- 25. ¿Está comprobando si no es nula antes de enviar un mensaje de liberación de buenas prácticas?
- 26. ¿Cómo se leen las variables agregadas a RequestContext dentro de las vistas genéricas basadas en clases?
- 27. Enviar o publicar un mensaje en un bucle de mensaje de Windows Forms
- 28. enviar un mensaje de texto a través de .net
- 29. Django permission_required mensaje de error?
- 30. ¿Cómo acceder a RequestContext en las vistas genéricas basadas en clases?
Gracias, me han decidido no utilizar la vista genérica, ya que no es lo suficientemente flexible como para manejar situaciones prácticas . – Myth
Estoy aceptando esta respuesta, ya que me ayudó mucho a tomar una decisión (para otros: aún no he probado el código) – Myth
+1. Buena solución! Tu decorador seguramente debe incluirse en el módulo de mensajes. – AJJ