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!!