2016-05-09 4 views
2

Я создаю пост-приложение, которое автоматически создает slug из заголовка сообщения. Если в заголовке есть какой-либо иностранный язык, пул не генерируется.django 1.9 slug field не работает для иностранного языка

Я уже рассмотрел некоторые из ответов здесь, но это не очень помогает. Я что-то пропустил внизу?

class Post(models.Model): 
    title = models.CharField(max_length=120) 
    slug = models.SlugField(unique=True, allow_unicode=True) 
    content = models.TextField() 

def create_slug(instance, new_slug=None): 
    slug = slugify(instance.title) 
    if new_slug is not None: 
     slug = new_slug 

    qs = Post.objects.filter(slug=slug).order_by("-id") 
    exists = qs.exists() 
    if exists: 
     new_slug = "%s-%s" %(slug, qs.first().id) 
     return create_slug(instance, new_slug=new_slug) 

    return slug 

def pre_save_post_receiver(sender, instance, *args, **kwargs): 
    if not instance.slug: 
     instance.slug = create_slug(instance) 

Добавлено ниже settings.py:

ALLOW_UNICODE_SLUGS = True 
+0

Пожалуйста, сначала обновите свой вопрос, отформатировав его, а затем добавив точное сообщение об ошибке, которое вы получите. Пожалуйста, также сообщите, какая библиотека slugify вы используете (встроенный Django или сторонний) – e4c5

+0

@ e4c5 благодарит за предложение! Я обязательно буду следовать этому. – Ankit

ответ

0

Вы должны сказать slugify, что она должна позволить юникод тоже. See docs.

def create_slug(instance, new_slug=None): 
    slug = slugify(instance.title, allow_unicode=True) 

Кроме того, будьте осторожны: по умолчанию max_length для SlugFieldis 50 characters. Поэтому преобразование длинного заголовка может привести к тому, что слишком длинный slug для вашего SlugField и вызовет исключение.

+0

Спасибо за решение и информацию о max_length по умолчанию для SlugField! Он работает нормально. – Ankit

+0

Полезно знать, что это работает @Ankit, вы должны затем пометить ответ как правильный, чтобы люди, приземляющиеся на этой странице, знали, что это работает в будущем. Кроме того, вы получите значок и несколько очков коричневого цвета :) – e4c5

Смежные вопросы