Slug 字段不适用于 django 中的孟加拉语。如何使用孟加拉语中的 slug 工作

问题描述 投票:0回答:3

Django slug 字段不适用于除英语之外的任何其他语言。我想使用孟加拉语工作 这是代码

class Post(models.Model):
    title = models.CharField(max_length=140)
    category = models.ForeignKey(Category, on_delete=models.DO_NOTHING)
    content = RichTextField(default="")
    image = models.ImageField(upload_to="media/post")
    url = models.SlugField(unique=True, max_length=250, null=True, blank=True)
    likes = models.IntegerField(default=0)
    created_date = models.DateTimeField(auto_now_add=True)
    update_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return f"{self.title}"

    def save(self, *args, **kwargs):  # new
        if not self.url:
            slug_str = f"{self.title}-{datetime.datetime.now()}"
            self.url = slugify(slug_str)
        return super().save(*args, **kwargs)
python django slug
3个回答
2
投票

allow_unicode=True 传递给您的

SlugField
以接受 unicode 字符

class Post(models.Model):
    ...
    url = models.SlugField(allow_unicode=True, unique=True, max_length=250, null=True, blank=True)

然后,当您生成 slug 时,您需要 将相同的参数传递给

django.utils.text.slugify

def save(self, *args, **kwargs):  # new
    if not self.url:
        slug_str = f"{self.title}-{datetime.datetime.now()}"
        self.url = slugify(slug_str, allow_unicode=True)
    return super().save(*args, **kwargs)

0
投票

这是我如何在我的一个项目中完成此操作的示例。

标题:স্পেনেরমাদ্রিদেবাংলাপ্রেসক্লাবেরদ্বি বার্ষিকসম্মেলন

您可以使用 SlugField 并允许 unicode,但您将得到 slug:সপনর-মদরদ-বল-পরসকলবর-দববরষক-সমমলন

让我们解决这个问题:

模型.py

    slug = models.CharField(
        max_length=200,
        unique=True, blank=True, null=True, editable=True
    )


    def save(self,*args, **kwargs):
        if not self.slug:
            self.slug = self.title.replace(" ", "-").replace(",", "")
        return super(BanglaModel, self).save(*args, **kwargs)

输出段:স্পেনের-মাদ্রিদে-বাংলা-প্রেসক্লাবের-দ্ব িবার্ষিক-সম্মেলন


0
投票

django.utils.text.slugify এর সমাস্যা হচ্ছে, সে বাংলা ফন্টের আকার ইকার সব ফেলে দেয়।

এভাবেকরতেপারেনঃ def save ফাংশনেরদ্বাড়াস্পেসওক মা গুলো রিপ্লেস করে দিবেন। আর বাংলা ফন্টের জন্য ফিল্ডের ইউনিকোড ট্রু করে দিবেন। max_length=150 কার আপার টাইটেল 140, এডমিন থেকে টেষ্ট করতে গেল ে ঝামেলা এড়াতে null=True,空白=True করে দিলাম,URL কিন্তু unique=True তো রাখতে ইহবে।

আমি ইমেজ ফরমেট webp কনভার্টসহ দিয়ে দিলাম, কারন এটা এখন লাগেই। কভার্ট করতে PIL ও BytesIO ইমপোর্ট করতে হবে।

from PIL import Image
from io import BytesIO

class Post(models.Model):
    title = models.CharField(max_length=140)
    category = models.ForeignKey(Category, on_delete=models.DO_NOTHING)
    content = RichTextField(default="")
    image = models.ImageField(upload_to="media/post")
    url = url = models.SlugField(allow_unicode=True, unique=True, max_length=150, null=True, blank=True)
    likes = models.IntegerField(default=0)
    created_date = models.DateTimeField(auto_now_add=True)
    update_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return f"{self.title}"

    def save(self, *args, **kwargs):  
        if not self.url:
            slug_str = f"{self.title}"
            self.url = self.title.replace(" ", "-").replace(",", "")
        return super().save(*args, **kwargs)

        if self.image:
            img = Image.open(self.image)
            output = BytesIO()
            img.convert('RGB').save(output, format='webp', maxsize=(800, 800))
            self.image = InMemoryUploadedFile(output,'ImageField', "%s.webp" %self.image.name.split('.')[0], 'media/post', output.getvalue(), None)
        super(Post, self).save(*args, **kwargs)
© www.soinside.com 2019 - 2024. All rights reserved.