CRUD en Django, crear la página de detalle o show
Vamos a crear uno de los procesos CRUDs fundamentales en nuestra aplicación en Django, que es la de mostrar una página de detalle (el Read o show); para ello, vamos a necesitar hacer 3 pasos
- Crear la función en la vista, views.py de nuestra aplicación.
- Crear la ruta a nivel de la aplicación.
- Crear el template.
Ya con esto estamos listos.
Crear la función en la vista, views.py de nuestra aplicación
def show(request,pk):
product = get_object_or_404(Product, id=pk)
"""try:
product = Product.objects.get(pk=pk)
except Product.DoesNotExist:
#return HttpResponse(status=404)
return HttpResponseNotFound()"""
return render(request, 'show.html', { 'product' : product })
La función anterior lo único que hace es buscar un registro (Producto en este caso) dada la pk; para eso empleamos la función llamada get_object_or_404, que permite buscar un registro, si no existe devuelve una página de 404; para esto, podemos también hacerlo de manera manual:
try:
product = Product.objects.get(pk=pk)
except Product.DoesNotExist:
#return HttpResponse(status=404)
return HttpResponseNotFound()
Que busca un registro, y si no existe devuelve una excepción de tipo 404, pero todo eso lo hace por nosotros get_object_or_404.
Crear la ruta a nivel de la aplicación
Para la ruta, la creamos, con un parámetro llamado pk de tipo entero y le damos un nombre.
app_name="gestion"
urlpatterns = [
path('',views.index),
path('detail/<int:pk>',views.show, name="show"),
]
Crear el template
En nuestro template, mostramos el contenido, lo normal, el titulo, precio, categoría y descripción:
{% extends "base.html" %}
{% block title %}
{{product.title}}
{% endblock title %}
{% block content %}
<h1>{{product.title}}</h1>
<p>{{product.price}}$</p>
<p>{{product.category.title}}</p>
<p>{{product.description}}</p>
{% endblock %}
Conclusión
Ya con esto, podemos generar un ciclo básico para mostrar el contenido de un registro, en resumen, creamos una ruta para pasarle un ID, buscamos el registro y lo mostramos en un template.
- Andrés Cruz
Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter