2016-05-09 28 views
2

Ich baue eine Post-App, die automatisch erstellt Slug aus dem Beitrag Titel. Wenn es eine Fremdsprache im Titel gibt, wird Slug nicht generiert.django 1.9 slug Feld funktioniert nicht für die Fremdsprache

Ich habe bereits einige der Antworten hier durchgegangen, aber es hilft nicht viel. Fehle ich etwas in unten?

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) 

unten Hinzugefügt in settings.py:

ALLOW_UNICODE_SLUGS = True 
+0

Bitte aktualisieren Sie Ihre Frage zuerst, indem Sie sie formatieren und dann die genaue Fehlermeldung hinzufügen, die Sie erhalten haben. Bitte informieren Sie auch, was die Slugify-Bibliothek ist, die Sie verwenden (Django ist eingebaut oder eine dritte Partei) – e4c5

+0

@ e4c5 danke für den Vorschlag! Ich werde sicherstellen, dass ich dem folge. – Ankit

Antwort

0

Sie müssen slugify sagen, dass es Unicode erlauben sollte, auch. See docs.

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

Auch seien Sie vorsichtig: die Standard-max_length für SlugFieldis 50 characters. Wenn Sie also einen langen Titel konvertieren, kann das zu einem Slug führen, der für Ihre SlugField zu lang ist und eine Ausnahme auslöst.

+0

Vielen Dank für die Lösung und die Information bezüglich default max_length von SlugField! Es funktioniert gut. – Ankit

+0

gut zu wissen, es funktioniert @Ankit, sollten Sie dann die Antwort als richtig markieren, so dass die Leute, die auf dieser Seite landen wissen, dass es in der Zukunft funktioniert. Außerdem bekommst du ein Badge und ein paar Braune Punkte :) – e4c5