هنگامی که از جنگو برای ساخت برنامههای تحت وب استفاده میکنید، ممکن است بخواهید به هر کدام از اشیاء در دیتابیس خود یک شناسه یکتا که به صورت خوانا برای انسان باشد بدهید. برای این کار، استفاده از فیلد اسلاگ یک راه حل خوب است. اسلاگها معمولاً برای آدرسهای یکتا، سئو، و لینکهای کاربرپسند استفاده میشوند.
فیلد اسلاگ به شما کمک میکند تا با استفاده از عنوان یا هر فیلد دیگری در مدل خود، یک کلید یکتا برای هر شیء تولید کنید که به راحتی میتوانید آن را در URLها استفاده کنید. اما سوالی که مطرح میشود این است که این اسلاگها چگونه ساخته و به مدلهای شما اضافه میشوند؟
در جنگو، میتوانید اسلاگ را به صورت خودکار بر اساس یک فیلد دیگر تولید کنید. به عنوان مثال، فرض کنید شما یک مدل برای وبلاگ خود دارید و میخواهید بر اساس عنوان مطلب، یک اسلاگ ایجاد کنید. این کار بسیار ساده است و جنگو ابزارهای مناسبی برای انجام این کار در اختیار شما قرار میدهد.
برای اضافه کردن فیلد اسلاگ به مدل خود، ابتدا باید از کلاس SlugField
استفاده کنید. این فیلد شباهت زیادی به سایر فیلدهای متنی دارد اما به صورت پیشفرض به گونهای طراحی شده است که فقط کاراکترهای مجاز برای یک URL را بپذیرد. میتوانید با استفاده از متدهای مناسب اسلاگ را بر اساس فیلد دلخواه در مدل ایجاد نمایید.
در ادامه، با استفاده از یک مثال کاربردی، نحوه اضافه کردن و ایجاد خودکار اسلاگ بر اساس عنوان یک مقاله در مدل وبلاگ را مشاهده خواهید کرد.
مثال کد برای ایجاد فیلد اسلاگ در مدل جنگو
from django.db import models
from django.utils.text import slugify
class Article(models.Model):
title = models.CharField(max_length=200)
slug = models.SlugField(unique=True, blank=True)
content = models.TextField()
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.title)
super(Article, self).save(*args, **kwargs)
توضیح خط به خط کد
from django.db import models
این خط ماژول
models
را از جنگو ایمپورت میکند که به ما امکان ساخت مدلهای پایگاهداده را میدهد.from django.utils.text import slugify
این خط ماژولی را وارد میکند که برای تبدیل رشتهها به اسلاگ استفاده میشود.
class Article(models.Model):
این خط یک کلاس به نام
Article
را تعریف میکند که از models.Model
ارثبری میکند. در واقع این کلاس مدل ما را تعریف میکند.title = models.CharField(max_length=200)
این خط یک فیلد متنی برای عنوان مقاله تعریف میکند که حداکثر ۲۰۰ کاراکتر میتواند داشته باشد.
slug = models.SlugField(unique=True, blank=True)
این خط یک فیلد اسلاگ یکتا و اختیاری تعریف میکند.
content = models.TextField()
این خط یک فیلد متنی بدون محدودیت برای محتوای مقاله تعریف میکند.
def save(self, *args, **kwargs):
این خط متدی به نام
save
را تعریف میکند که به هنگام ذخیرهسازی شیء فراخوانی میشود.if not self.slug:
این خط بررسی میکند که آیا فیلد اسلاگ تنظیم شده است یا نه.
self.slug = slugify(self.title)
اگر فیلد اسلاگ تنظیم نشده باشد، یک اسلاگ براساس عنوان مقاله ایجاد و تنظیم میشود.
super(Article, self).save(*args, **kwargs)
این خط متد
save
را از کلاس والد فراخوانی میکند تا شیء را به دیتابیس ذخیره کند.