当用户名有奇数字符时,django用户名相关的URL解析失败

时间:2016-11-06 20:01:55

标签: python django

因此,默认的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的一部分。关于如何做到这一点的任何想法?





谢谢




1 个答案:

答案 0 :(得分:2)

您应该更改URL以使其不会失败,而不是更改模型。问题是你的正则表达式:\w\d仅匹配字母数字字符(实际上\w已经这样做了,\d是多余的)。您可以添加要匹配的特定字符:

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

或只是匹配所有内容:

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