2016-11-06 3 views
0

So das Standardmodell Django User ermöglicht Nutzernamen, ein paar seltsame Zeichen zu haben - z. Ich kann einen Benutzer mit dem Namen '@. + -_' einrichten. Ich habe jedoch eine Benutzerprofilseite erstellt, deren URL vom Benutzernamen abhängig ist. Ich möchte die Benutzername statt User_id verwenden, weil es besser lesbar ist:django Benutzername-bezogene URL-Auflösung schlägt fehl, wenn der Benutzername ungerade Zeichen hat

url(r'^public_profile/(?P<username>[\w\d]+)$', 
    views.public_profile, 
    name='public_profile'), 

Dies funktioniert für die meisten Anwender in Ordnung, aber wenn ein Benutzer mit einem funky Namen - zum Beispiel '@. + -_' wird nachgeschlagen, die Seite public_profile schlägt mit einem Fehler fehl. -> Also dachte ich, ich könnte ein 'slug' Feld zum User Modell hinzufügen, und das plus die user_id in der URL verwenden (so dass die Slugs nicht versehentlich kollidieren), aber ich bin mir nicht sicher, wie ich das User modifizieren kann Modell, da es ein Teil von Django ist. Irgendwelche Ideen, wie man das macht?

Dank

Antwort

2

Anstatt das Modell zu ändern, sollten Sie die URL ändern, so dass es nicht ausfällt. Das Problem ist Ihre Regex: \w\d entspricht nur alphanumerischen Zeichen (in der Tat \w tut das schon, die \d ist überflüssig).

r'^public_profile/(?P<username>[[email protected]_.\w]+)$' 

oder einfach alles passen: Sie könnten die spezifischen Zeichen, die Sie anpassen möchten, fügen Sie

r'^public_profile/(?P<username>.+)$' 
+0

Man. Ich weiß, dass Kommentare nicht für Dankeschöns verwendet werden sollten ... Aber du hast mir gerade eine Menge Zeit verschwendet! Ich habe mich ganz auf das Falsche konzentriert. +10 Große Antwort. –

Verwandte Themen