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()
를 사용하여 슬러그를 호출합니다. 그런 다음 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