2016-11-06 11 views
0

因此,默認的Django User模型允許用戶名有一些奇怪的字符 - 例如,我可以創建一個名爲'@。+ -_'的用戶。不過,我製作了一個用戶個人資料頁面,其網址取決於用戶名。我想使用的用戶名,而不是user_ID的,因爲它更易讀:當用戶名有奇數字符時,django用戶名相關的URL解析失敗

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

這對於大多數用戶工作正常,但是當用一個時髦的名稱的用戶 - 例如查找'@。+ -_',public_profile頁面失敗,出現

Reverse for 'public_profile' with arguments '('@.+-_',)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['public_profile/(?P<username>[\\w\\d]+)$'] 

錯誤。 - >所以,我想我可以在User模型中添加一個'slug'字段,並使用它加上url中的user_id(所以slu do不會意外碰撞),但我不知道如何修改User模型,因爲它是django的一部分。任何想法如何做到這一點?

感謝

回答

2

而不是改變模型,你應該改變URL,使其不會失敗。問題是你的正則表達式:\w\d只匹配字母數字字符(實際上\w已經這樣做了,\d是多餘的)。你可以添加你要匹配的特定字符:

​​

或只是比賽的一切:

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

人。我知道評論不應該用於感謝你......但是你爲我節省了很多時間!我完全專注於錯誤的事情。 +10很好的答案。 –

相關問題