مرکز آموزش میهن وب هاست

مرکز آموزش میهن وب هاست

اسلاگ فارسی در جنگو

پرینت این مقاله پرینت این مقاله

در Django، استفاده از اسلاگ‌ها (slug) به‌ویژه در پروژه‌هایی که نیاز به URLهای فارسی و قابل فهم دارند، بسیار مهم است. در زیر نحوه کار با اسلاگ‌ها در Django و به‌طور خاص استفاده از اسلاگ‌های فارسی در مدل‌ها، فرم‌ها و URLها توضیح داده می‌شود.
1. تعریف اسلاگ در مدل‌ها
برای استفاده از اسلاگ در مدل‌های Django، می‌توانید یک فیلد SlugField به مدل خود اضافه کنید. برای اطمینان از ایجاد اسلاگ در محتوای فارسی، باید از یک تابع برای تبدیل نام‌ها به اسلاگ مناسب بهره ببرید. در زیر نحوه تعریف یک فیلد اسلاگ برای مدل در Django آورده شده است:
from django.db import models

from django.utils.text import slugify

class Article(models.Model):

title = models.CharField(max_length=255)

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().save(*args, **kwargs)

def __str__(self):

    return self.title

در کد بالا، از slugify استفاده شده است که به‌طور پیش‌فرض متن را به‌صورت انگلیسی به اسلاگ تبدیل می‌کند. اما وقتی از اسلاگ فارسی استفاده می‌کنید، این تابع ممکن است نیاز به تنظیمات خاصی داشته باشد تا حروف فارسی به درستی تبدیل شوند. در حالت پیش‌فرض، slugify ممکن است برخی از حروف فارسی را به‌درستی پشتیبانی نکند، بنابراین می‌توان از کتابخانه‌هایی مانند unidecode یا تغییرات جزئی در کد استفاده کرد تا اسلاگ‌های فارسی به‌درستی تولید شوند. 
در اولین قدم می بایست اسلاگ را در کلاس های مدل خود تعریف نمایید. (فایل models.py پروژه)
به طور مثال در کلاس مربوط به Article کدهای زیر درج خواهد شد:

from django.utils.text import slugify

import re

def slugify_fa(text):

# حذف کاراکترهای غیر فارسی و جایگزینی فاصله‌ها

text = re.sub(r'[^\u0600-\u06FF\s]', '', text)

text = slugify(text)  # استفاده از slugify برای تبدیل متن

return text

در این صورت، می‌توانید از slugify_fa به‌جای slugify استفاده کنید.

class Article(models.Model):

title = models.CharField(max_length=255)

slug = models.SlugField(unique=True, blank=True)

content = models.TextField()

def save(self, *args, **kwargs):

    if not self.slug:

        self.slug = slugify_fa(self.title)

    super().save(*args, **kwargs)




2- سپس در فایل views.py کد های زیر را اضافه نمایید:

from django.utils.text import slugify

و در ادامه class های خود را برای ایجاد اسلاگ همچون مثال زیر اصلاح کنید:

title = "راهنمای اسلاگ فارسی در جنگو" 

slug = slugify(title, allow_unicode=True)

توجه داشته باشید که title در این بخش به صورت مثال نوشته شده است.

پارامتر allow_unicode=True در تابع slugify اجازه می‌دهد که حروف فارسی به‌طور کامل در اسلاگ ذخیره شوند.

3- در مرحله بعد نیز در فایل urls.py کدهای زیر را وارد کنید:

پس از اینکه اسلاگ‌ها را برای مدل‌ها تعریف کردید، می‌توانید از آن‌ها در URLها استفاده نمایید. در زیر نحوه تعریف URLهایی که از اسلاگ فارسی استفاده می‌کنند آمده است:

from django.urls import path

from . import views

urlpatterns = [

path('article/<slug:slug>/', views.article_detail, name='article_detail'),

]

4- برای اینکه در زمان وارد کردن عنوان پست، اسلاگ به صورت خودکار ساخته و در فیلد مربوط به آن وارد شود از کد زیر در فایل admin.py استفاده نمایید:

from django.contrib import admin

 from.models import Comment, Post

class PostAdmin(admin.ModelAdmin):

 list_display = ("title", "slug", "status", "created_on") 

prepopulated_fields = {"slug": ("title")}

5/5 از 2 رای