【问题标题】:How to allow "@" in django urls?如何在 django url 中允许“@”?
【发布时间】:2015-02-26 01:14:48
【问题描述】:

我希望用户能够选择@ 以及用户名中的字母数字和连字符。但是,这会导致相关正则表达式中出现 404:

url(r'^(?P<username>[\w.-]+)/$', 'userprofile.views.profile'),

我尝试了[\w.-@][\w.-\@],但都没有成功。

如何解决这个问题?

【问题讨论】:

标签: django django-urls


【解决方案1】:

这个问题没有说明电子邮件地址,只是想在用户名中使用@ 符号,这就足够了:

url(r'^(?P<username>[\w@\d-]+)/$', 'userprofile.views.profile'),

相关位是:[\w@\d-\.]+,它匹配任何单词字符、@ 符号*、任何数字、连字符或点中的至少一个。

* The @ symbol is the only character on a standard 101 keyboard to not have a name!

【讨论】:

  • 不幸的是,我仍然得到:NoReverseMatch at /profile/@@@/NoReverseMatch at /profile/p@q/ 以及 @ 的其他创造性用法 :(
  • 原来由于之前的 url 渲染错误,没有创建用户配置文件。您的正则表达式非常好,期望它需要一个 . 来计算点名。请添加,我会接受答案。谢谢。
【解决方案2】:

您可以将@ 设为可选。此模式将捕获大多数类似电子邮件的字符串。

(?P<username>[-\w]+(?:\@)?[A-Za-z0-9.-]+(?:\.)?[A-Za-z]{2,4})

如果你想捕捉像a@a 这样的东西,你需要在之后做所有的事情,包括句号是可选的:

(?P<username>[-\w]+(?:\@)?[A-Za-z0-9.-]+(?:\.[A-Za-z]{2,4})?)?

该模式将匹配:

foo@bar.com
foo@bar
foobar

【讨论】:

  • 您必须将包括和之后的所有内容设为可选
  • 抱歉,不确定您的意思。
  • 我添加了一个额外的例子。
  • 唉,我仍然得到 NoReverseMatch at /profile/@@@/NoReverseMatch at /profile/a@a/
  • 好吧,我不知道你为什么要在你的用户名中使用@@@,但是,@Lego Stormtroopr 的 RegEx 确实有效,而且更简单。我错误地假设您使用两种基本模式类型 - 电子邮件和/或用户名
猜你喜欢
  • 2010-12-16
  • 1970-01-01
  • 2016-08-11
  • 1970-01-01
  • 1970-01-01
  • 2019-08-10
  • 1970-01-01
  • 1970-01-01
  • 2017-10-06
相关资源
最近更新 更多