اسلاگ فارسی در جنگو
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
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")}