Babosa en Django

Salman Mehmood 20 junio 2023
  1. Use Slug para obtener publicaciones únicas en Django
  2. Usa el campo Slug en Django
Babosa en Django

Esta demostración tiene como objetivo definir un slug y cómo podemos usar el campo slug para obtener una publicación única con Django en Python.

Use Slug para obtener publicaciones únicas en Django

Una babosa sería algo que se puede compartir un poco más para nuestra publicación real.

Por ejemplo, si disparamos http://127.0.0.1:8000/post/pa-roate-10, podemos ir así, pero esto no se ve bien. Por eso introdujo el concepto de slug en Django.

En lugar del anterior, podemos hacerlo como http://127.0.0.1:8000/post/Djangoslug si tenemos el título Django Slug. Luego podemos activar nuestra publicación usando su título de publicación.

Otra cosa que podemos hacer es, en lugar de espacio, podemos usar - y convertir esto en minúsculas. Supongamos que este es nuestro título Django Slug, y si lo convertimos a minúsculas con -, tenemos django-slug.

Usa el campo Slug en Django

Ahora, veamos cómo usar el campo slug en Django. Podemos pasar el slug a la URL entre los símbolos mayor (>) y menor (<).

Podemos especificarlo con tipos de datos específicos. views.categoryview() llama a una función del archivo views.py, luego esa función representará el contenido HTML.

urlpatterns = [
    path("category/<str:cats>/", views.categoryview(), name="category"),
]

Vayamos a nuestro archivo model.py y llamemos a un slug con models.SlugField(). Luego pasamos True al parámetro unique.

Este es un campo obligatorio. Como hemos configurado único = Verdadero, configuramos el título de la publicación con sus nombres únicos en una base de datos.

slug = models.SlugField(max_length=100, unique=True)

Entonces, dentro de nuestro archivo models.py, podemos crear una señal que hará algo antes de que se guarde. Necesitamos importar la señal usando el siguiente código.

from django.db.models.signals import pre_save

Para convertir nuestro título en un slug, necesitamos importar la clase slugify. Así que nuestro título, Django Slug, se convertirá en django-slug.

from django.template.defaultfilters import slugify

Definamos una función para que sea un receptor de señales. Necesitamos pasar el remitente, una instancia, argumentos y argumentos de palabras clave.

En esta función definida, primero, obtenemos el slug y nos aseguramos de que el slug no exista ya. Comprobaremos si existe haciendo un filtro.

Escribimos el slug igual a una cadena como esta "%s-%s". Este será el ID de la instancia, por lo que podemos obtener el slug original llamándolo.

def pre_save_post_reciever(sender, instance, *args, **kwargs):
    slug = slugify(instance.title)
    exists = post.objects.filter().exists()
    if exists:
        skug = "%s-%s" % (slug, instance.id)
    instance.slug = slug

    pre_save.connect(pre_save_post_reciever, sender=post)

Ejecuta esto antes de ser guardado cada vez que se llama a un método de pre_save(). La función pre_save_post_reciever() actualizará nuestro slug en consecuencia.

from django.db.models.signals import pre_save
from django.dispatch import receiver
from django.template.defaultfilters import slugify


def pre_save_post_reciever(sender, instance, *args, **kwargs):
    slug = slugify(instance.title)
    exists = post.objects.filter().exists()
    if exists:
        skug = "%s-%s" % (slug, instance.id)
    instance.slug = slug

    pre_save.connect(pre_save_post_reciever, sender=post)
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn