me gustaría saber como espectáculo de error personalizado con get_object_or_404
?, Yo no quiero las páginas normales Http404, quiero mostrar un mensaje con el resultado no eserror muestran cómo personalizado con get_object_or_404
gracias :)
me gustaría saber como espectáculo de error personalizado con get_object_or_404
?, Yo no quiero las páginas normales Http404, quiero mostrar un mensaje con el resultado no eserror muestran cómo personalizado con get_object_or_404
gracias :)
La get_object_or_404()
es básicamente una función simple de 5 líneas. A menos que tenga alguna razón específica para usarlo, simplemente hacer:
try:
instance = YourModel.objects.get(pk=something)
except YourModel.DoesNotExist:
return render_to_response('a_template_with_your_error_message.html')
Si por cualquier razón usted tiene utilizar get_object_or_404(), puede intentar ponerlo en un bloque try: ... except Http404: ...
, pero sinceramente no puede piensa en una razón plausible para eso.
Eso no se puede hacer con ese atajo. Solo puede generar una excepción Http404. Tu mejor opción es intentar atrapar si quieres un control total. P.ej.
try:
obj = Model.objects.get(pk = foo)
except:
return HttpResponseRedirect('/no/foo/for/you')
#or
return render_to_response ...
¿Y por qué exactamente no estás usando la capacidad de tu servidor para hacer exactamente eso?
get_object_or_404()
está redirigiendo a la página predeterminada 404 ¿verdad?
Si está en modo de depuración no lo verá, pero cuando lo despliegue django solo se referirá a la página de 404 html del servidor.
Según lo indicado por michael, al usar get_object_or_404 no puede personalizar el mensaje dado en http 404. El mensaje proporcionado en DEBUG ofrece información sobre la excepción: "Ningún MyModel coincide con la consulta dada".
Mira el doc en esto. Hay tres argumentos: Modelo, * args y ** kwargs. Los dos últimos se usan para construir un argumento para get() o filter() en el Modelo.
La razón que escribí, sin embargo, es abordar la pregunta de por qué querríamos usar una función auxiliar como get_object_or_404() en lugar de, por ejemplo, atraparla con una excepción como Model.DoesNotExist.
La solución posterior acopla la capa de vista a la capa del modelo. En un esfuerzo por relajar este acoplamiento, podemos aprovechar el acoplamiento controlado que se ofrece en el módulo django.shortcuts [1].