Django のスラッグ
このデモンストレーションは、スラッグを定義し、スラッグ フィールドを使用して Python の Django で一意の投稿を取得する方法を目的としています。
Slug を使用して Django でユニークな投稿を取得する
スラッグは、実際の投稿自体でもう少し共有しやすいものになります。
たとえば、http://127.0.0.1:8000/post/pa-roate-10
をトリガーすると、このように実行できますが、これは見栄えがよくありません。 そのため、Django にスラッグの概念が導入されました。
上記の代わりに、Django Slug
タイトルがあれば http://127.0.0.1:8000/post/Djangoslug
のようにできます。 次に、投稿のタイトルを使用して投稿をトリガーできます。
もう 1つできることは、スペースの代わりに -
を使用して、これを小文字に変換することです。 これが私たちのタイトル Django Slug
で、これを -
で小文字に変換すると、django-slug
になります。
Django で Slug フィールドを使用する
それでは、Django で slug フィールドを使用する方法を見てみましょう。 大きい (>
) 記号と小さい (<
) 記号の間でスラッグを URL に渡すことができます。
特定のデータ型で指定できます。 views.categoryview()
は views.py
ファイルから関数を呼び出し、その関数は HTML コンテンツをレンダリングします。
urlpatterns = [
path("category/<str:cats>/", views.categoryview(), name="category"),
]
model.py
ファイルにジャンプして、models.SlugField()
でスラッグを呼び出しましょう。 次に、True
を unique
パラメータに渡します。
これは必要項目です。 unique=True
を設定したので、データベース内の一意の名前で投稿タイトルを設定します。
slug = models.SlugField(max_length=100, unique=True)
そのため、models.py
ファイル内で、これが保存される前に何かを行うシグナルを作成できます。 次のコードを使用してシグナルをインポートする必要があります。
from django.db.models.signals import pre_save
タイトルをスラッグに変えるには、slugify
クラスをインポートする必要があります。 したがって、タイトル Django Slug
は django-slug
に変わります。
from django.template.defaultfilters import slugify
関数をシグナルレシーバーとして定義しましょう。 送信者、インスタンス、引数、およびキーワード引数を渡す必要があります。
この定義された関数では、最初にスラッグを取得し、スラッグがまだ存在しないことを確認します。 フィルターを実行して、存在するかどうかを確認します。
"%s-%s"
のように文字列に等しいスラッグを書きます。 これがインスタンス ID になるので、それを呼び出すことで元のスラッグを取得できます。
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)
pre_save()
のメソッドが呼び出されるたびに、保存される前にこれを実行します。 pre_save_post_reciever()
関数はそれに応じてスラッグを更新します。
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