Seite 1 von 1

Django: Unicode problem

Verfasst: Mittwoch 28. September 2016, 15:38
von basiq0n
Hallo werte Gemeinde,

ich bin neu hier und auf der Suche nach einer Lösung auf dieses Forum gestoßen.

Es geht darum, dass ich beim Django-lernen mithilfe eines kleinen Tutorials einen Webblog geschrieben habe der mich im "content" Bereich einfach keinen Unicode speichern lassen möchte. Das komische ist, dass der Error ein KeyError ist und kein UnicodeEncodeError.

Meine Models.py

Code: Alles auswählen

class Post(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
    title = models.CharField(max_length=120)
    content = models.TextField()
    publish = models.DateField(auto_now=False, auto_now_add=False)
    updated = models.DateTimeField(auto_now=True, auto_now_add=False)
    timestamp = models.DateTimeField(auto_now=False, auto_now_add=True)

    def __unicode__(self):
        return self.title
Den unicode-teil habe ich schon mehrfach ausgetauscht und herumprpobiert aber bisher erfolglos:

Code: Alles auswählen

def __unicode__(self):
        return u"%s" % (self.content)

# Oder:

def __unicode__(self):
       return self.title + self.content
Am Anfang meinr models.py und views.py steht jeweils # coding: utf-8
Ich habe auch versucht smart_text() á la https://docs.djangoproject.com/en/1.10/ ... -functions probiert aber verstehe die Anwendung nicht so richtig.

Das komische ist, dass ich im Admin Bereich problemlos Posts erstellen kann, die im Titel als auch im Content unicode enthalten. Sobald ich das aber über die URL anschauen möchte kommt der KeyError:

Code: Alles auswählen

Internal Server Error: /posts/test/
Traceback (most recent call last):
  File "/Users/xxx/Desktop/djangoprj/lib/python2.7/site-packages/django/core/handlers/base.py", line 149, in get_response
    response = self.process_exception_by_middleware(e, request)
  File "/Users/xxx/Desktop/djangoprj/lib/python2.7/site-packages/django/core/handlers/base.py", line 147, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/xxx/Desktop/djangoprj/src/posts/views.py", line 40, in post_detail
    share_string = quote_plus(instance.content)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib.py", line 1308, in quote_plus
    s = quote(s, safe + ' ')
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib.py", line 1303, in quote
    return ''.join(map(quoter, s))
KeyError: u'\xfc'
Meine views.py wo der Fehler auftritt:

Code: Alles auswählen

def post_detail(request, slug=None):
    instance = get_object_or_404(Post, slug=slug)
    if instance.publish > timezone.now().date() or instance.draft:
        if not request.user.is_staff or not request.user.is_superuser:
            raise Http404
    share_string = quote_plus(instance.content)
    context = {
        "title": instance.title,
        "instance": instance,
        "share_string": share_string,

    }

    return render(request, "post_detail.html", context)

Ich hoffe ich habe alle Informationen bereitgestellt die das ganze tangiert. Vielleicht erkennt jemand diesen Fehler.

Über Tipps und Hinweise würde ich mich sehr freuen,

herzlichen Dank


basiq0n

Re: Django: Unicode problem

Verfasst: Mittwoch 28. September 2016, 15:43
von Sirius3
@basiq0n: warum rufst Du quote_plus auf? quote_plus kann nur mit Bytestrings umgehen.

Re: Django: Unicode problem

Verfasst: Mittwoch 28. September 2016, 15:47
von basiq0n
Sirius, oh man das ist die Lösung. Jetzt habe ich so lange gesucht und diese Kleinigkeit war das Problem. Vielen Herzlichen Dank!