Schnecke in Django

Salman Mehmood 20 Juni 2023
  1. Verwenden Sie Slug, um einzigartige Beiträge in Django zu erhalten
  2. Verwenden Sie das Slug-Feld in Django
Schnecke in Django

Diese Demonstration zielt darauf ab, einen Slug zu definieren und wie wir das Slug-Feld verwenden können, um einen eindeutigen Beitrag mit Django in Python zu erhalten.

Verwenden Sie Slug, um einzigartige Beiträge in Django zu erhalten

Eine Schnecke wäre etwas, das für unseren eigentlichen Beitrag selbst ein bisschen besser teilbar wäre.

Wenn wir beispielsweise http://127.0.0.1:8000/post/pa-roate-10 auslösen, können wir so vorgehen, aber das sieht nicht gut aus. Aus diesem Grund wurde das Konzept von Slug in Django eingeführt.

Anstelle des obigen können wir es als http://127.0.0.1:8000/post/Djangoslug machen, wenn wir den Titel Django Slug haben. Wir können unseren Beitrag dann mit seinem Beitragstitel auslösen.

Eine andere Sache, die wir tun können, ist, dass wir anstelle des Leerzeichens - verwenden und dies in Kleinbuchstaben umwandeln können. Angenommen, dies ist unser Titel Django Slug, und wenn wir ihn mit - in Kleinbuchstaben umwandeln, haben wir django-slug.

Verwenden Sie das Slug-Feld in Django

Sehen wir uns nun an, wie das Slug-Feld in Django verwendet wird. Wir können den Slug zwischen den größeren (>) und kleineren (<) Symbolen an die URL übergeben.

Wir können es mit bestimmten Datentypen spezifizieren. views.categoryview() ruft eine Funktion aus der Datei views.py auf, dann rendert diese Funktion den HTML-Inhalt.

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

Lassen Sie uns in unsere model.py-Datei springen und einen Slug mit models.SlugField() aufrufen. Dann übergeben wir True an den unique-Parameter.

Das ist ein Pflichtfeld. Da wir unique=True gesetzt haben, legen wir die Beitragstitel mit ihren eindeutigen Namen in einer Datenbank fest.

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

In unserer models.py-Datei können wir also ein Signal erstellen, das etwas tut, bevor es gespeichert wird. Wir müssen das Signal mit dem folgenden Code importieren.

from django.db.models.signals import pre_save

Um unseren Titel in einen Slug zu verwandeln, müssen wir die Klasse slugify importieren. Aus unserem Titel Django Slug wird dann also django-slug.

from django.template.defaultfilters import slugify

Lassen Sie uns eine Funktion als Signalempfänger definieren. Wir müssen den Absender, eine Instanz, Argumente und Schlüsselwortargumente übergeben.

In dieser definierten Funktion erhalten wir zuerst den Slug und stellen sicher, dass der Slug nicht bereits existiert. Wir werden überprüfen, ob es existiert, indem wir einen Filter durchführen.

Wir schreiben den Slug gleich einem String wie diesem "%s-%s". Dies ist die Instanz-ID, sodass wir den ursprünglichen Slug abrufen können, indem wir diese aufrufen.

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)

Es führt dies aus, bevor es jedes Mal gespeichert wird, wenn eine Methode von pre_save() aufgerufen wird. Die Funktion pre_save_post_reciever() aktualisiert unseren Slug entsprechend.

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