因此,默认的Django User
模型允许用户名有一些奇怪的字符 - 例如我可以让一个名为'@。+ -_'的用户。但是,我创建了一个用户个人资料页面,其网址取决于用户名。我想使用用户名代替user_id,因为它更具可读性:
url(r'^ public_profile /(?P< username> [\ w \ d] +)$',
 views.public_profile,
 name ='public_profile'),



 这适用于大多数用户,但是当用户具有时髦的名字时 - 例如查找'@。+ -_',public_profile页面失败,带有


 反向'public_profile'带参数'('@。+ -_ ',)'和关键字参数'{}'未找到。尝试了1种模式:['public_profile /(?P< username> [\\ w \\ d] +)$']



 错误。 - >所以,我想我可以在 User
模型中添加一个'slug'字段,并使用它加上url中的user_id(所以slu不会意外碰撞),但我是不知道如何修改 User
模型,因为它是django的一部分。关于如何做到这一点的任何想法?
谢谢

答案 0 :(得分:2)
您应该更改URL以使其不会失败,而不是更改模型。问题是你的正则表达式:\w\d
仅匹配字母数字字符(实际上\w
已经这样做了,\d
是多余的)。您可以添加要匹配的特定字符:
r'^public_profile/(?P<username>[+-@_.\w]+)$'
或只是匹配所有内容:
r'^public_profile/(?P<username>.+)$'