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