Django의 슬러그

Salman Mehmood 2023년6월20일
  1. Slug를 사용하여 Django에서 고유 게시물 얻기
  2. Django에서 슬러그 필드 사용
Django의 슬러그

이 데모는 슬러그를 정의하고 슬러그 필드를 사용하여 Python에서 Django로 고유한 게시물을 얻는 방법을 목표로 합니다.

Slug를 사용하여 Django에서 고유 게시물 얻기

슬러그는 실제 게시물 자체에 대해 조금 더 공유할 수 있는 것입니다.

예를 들어 http://127.0.0.1:8000/post/pa-roate-10을 트리거하면 이렇게 할 수 있지만 좋지 않습니다. 그래서 Django에 slug라는 개념을 도입했습니다.

위의 것 대신 Django Slug 제목이 있으면 http://127.0.0.1:8000/post/Djangoslug로 만들 수 있습니다. 그런 다음 게시물 제목을 사용하여 게시물을 트리거할 수 있습니다.

우리가 할 수 있는 또 다른 일은 공백 대신 -를 사용하여 소문자로 변환하는 것입니다. 이것이 Django Slug라는 제목이고 -를 사용하여 소문자로 변환하면 django-slug가 됩니다.

Django에서 슬러그 필드 사용

이제 Django에서 slug 필드를 사용하는 방법을 살펴보겠습니다. 더 큰(>) 기호와 더 작은(<) 기호 사이의 URL에 슬러그를 전달할 수 있습니다.

특정 데이터 유형으로 지정할 수 있습니다. views.categoryview()views.py 파일에서 함수를 호출한 다음 해당 함수가 HTML 콘텐츠를 렌더링합니다.

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

model.py 파일로 이동하여 models.SlugField()를 사용하여 슬러그를 호출합니다. 그런 다음 Trueunique 매개변수에 전달합니다.

이것은 필수 필드입니다. unique=True로 설정했으므로 데이터베이스에서 고유한 이름으로 게시물 제목을 설정합니다.

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

따라서 models.py 파일 내에서 이것이 저장되기 전에 무언가를 수행할 신호를 생성할 수 있습니다. 다음 코드를 사용하여 신호를 가져와야 합니다.

from django.db.models.signals import pre_save

제목을 슬러그로 바꾸려면 slugify 클래스를 가져와야 합니다. 따라서 제목인 Django Slugdjango-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)
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