Django: Unicode problem

Django, Flask, Bottle, WSGI, CGI…
Antworten
basiq0n
User
Beiträge: 2
Registriert: Mittwoch 28. September 2016, 15:16

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
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

@basiq0n: warum rufst Du quote_plus auf? quote_plus kann nur mit Bytestrings umgehen.
basiq0n
User
Beiträge: 2
Registriert: Mittwoch 28. September 2016, 15:16

Sirius, oh man das ist die Lösung. Jetzt habe ich so lange gesucht und diese Kleinigkeit war das Problem. Vielen Herzlichen Dank!
Antworten