No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Aprende todo un fin de semana sin pagar una suscripción 🔥

Aprende todo un fin de semana sin pagar una suscripción 🔥

Regístrate

Comienza en:

0D
18H
19M
4S
Curso Básico de Django

Curso Básico de Django

Facundo García Martoni

Facundo García Martoni

Elevando el error 404

22/29
Recursos

Aportes 17

Preguntas 7

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

o inicia sesión.

Personalizar Error 404 puedes hacer lo siguiente:

En settings,py debes modificar lo siguiente:

DEBUG = False
ALLOWED_HOSTS = ['*']

Y el archivo debe ir dentro de polls/templates/404,html

Esta muy interesante la manera de hacer consultas

En los templates no se le colocan los () al queryset
Porque así es la sintaxis de django para hacer los templates.

Se puede hacer el queryset desde la vista si se desea:

question = Question.objects.get(pk=question_id)
choices = question.choice_set.all()

O como lo hizo el profesor desde el template:

{% for choice in question.choice_set.all %}

Permitiendo Minimixar lineas de código.
Aunque no lo quería, a medida que avanzo en aprendizaje busco la manera de escribir menos lineas posibles.

Nunca pares de aprender.
Exitos codeando 😉

La verdad que Django es una delicia para programar, tiene la simplicidad de Python para programar y entender el código. Pero a su vez un montón de funcionalidades de una comunidad tan activa y con lo cual puedes hacer casi todo. Me encanta este framework es lo que estaba buscando para mis herramientas de desarrollo.

Http Status Code:

Este es un tema muy interesante acerca de los shortcut functions de Django, en este documento cortico encontrarán toda la información valiosa para entender el funcionamiento más a profundidad, espero sea de ayuda.

Allí se tratan 4 puntos importantes:

  • render()
  • redirect()
  • get_object_or_404()
  • get_list_or_404()

Documentación: Django shortcut functions

La forma de hacerlo sin el shorcut podria ser así:

from django.http import Http404
def detail(request, question_id):
    try:
        question = Question.objects.get(pk=question_id)
    except Question.DoesNotExist:
        raise Http404()

Aclaracion:
Este approach funciona cuando tenemos definido un template espacifico para errores 404 (404.html), si DEBUG=False en el config. py entonces Django va a mostrar este template cada vez que elevemos el error asi como lo hice yo. Tambien puedes hacerlo de la siguiente manera

return HttpResponseNotFound('<h1> not found </h1>')

de esta forma puedes definir el html a retrnar directamente en la response.

Mas detalles en la doc de Django

Ahora, se crea un template para cada vez que se quiera ver el detalle de una pregunta en el archivo templates/polls/detail.html

<h1>{{question.question_text}}</h1>
<ul>
    {% for choice in question.choice_set.all %}
        <li>{{ choice.choice_text }}</li>
    {% endfor %}
</ul>

De igual forma se tiene que configurar la llamada del template en las vistas:

def detail(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    return render(request, "polls/detail.html",{
        "question": question
    } )

La funcion get_object_or_404 es usada para devolver un error 404 si no se encuentra el objeto.

Todos mis apuntes en mi gitHub

Muy buena está clase

HTTP Responses:

  • 100: Información
  • 200: Todo salió bien.
  • 300: Redirección.
  • 400: Error del usuario
  • 500: Error del servidor.

si no hay respuesta, salta un comentario "no hay

{% if question.choice_set.all %}
    <h1>{{question.question_text}}</h1>
        <ul>
    {% for choice in question.choice_set.all %}
        <li>{{choice.Choices_text}}</li>
    {% endfor %}
        </ul> 
{% else %}
    <p> <h1>{{question.question_text}}</h1></p>
    <p> no hay</p>
{% endif %}

"

Si no encuentra respuestas simplemente se pone una condicion:

<h1>{{question.question_text}}</h1>
<ul>
    {% if question.question_choices.all %}
        {% for choice in question.question_choices.all %}
            <li>{{choice.choice_text}}</li>
        {% endfor %}
    {% else %}
        <p>No choices for this question</p>
    {% endif %}
    
</ul> 

Nice

https://developer.mozilla.org/es/docs/Web/HTTP/Status

Respuestas informativas (100–199),
Respuestas satisfactorias (200–299),
Redirecciones (300–399),
Errores de los clientes (400–499),
y errores de los servidores (500–599).

Los códigos de estado se definen en la sección 10 de RFC 2616. Puedes obtener las especificaciones actualizadas en RFC 7231.

Fuente:developer.mozilla.org/

Tipar los parámetros ayuda al autocompletado 😄

from django.http import HttpRequest

def detail(request: HttpRequest, question_id: int):
    question = get_object_or_404(Question, pk=question_id)
    return render(request, 'polls/detail.html', {
        'question': question
    })

Excelente y muy sencillo!!