2016-04-08 103 views
2

我的Django的网址不工作,我得到一个错误ReverseMatch:正则表达式错误

Reverse for 'activation_mail' with arguments '()' and keyword arguments '{u'activation_key': '1c38a44d216a51c26e65d789a3d8af2677cebebd', u'email': u'[email protected]', u'site_url': 'http://127.0.0.1:8000'}' not found. 1 pattern(s) tried: [u'accounts/mails/(P<activation_key>[0-9a-zA-Z]{40})/(P<email>[a-zA-Z0-9_.+-][email protected][a-zA-Z0-9-]+[.][a-zA-Z0-9-.]+)/(P<site_url>.*)/$'] 

发生的错误当用户注册到网站。输入验证码后,尝试向用户地址发送确认电子邮件时发生错误。

urls.py:

urlpatterns = patterns(
    url(r'^mails/(P<activation_key>[0-9a-zA-Z]{40})/(P<email>[a-zA-Z0-9_.+-][email protected][a-zA-Z0-9-]+[.][a-zA-Z0-9-.]+)/(P<site_url>.*)/$', TemplateView.as_view(template_name='accounts/mails/activation_email.html'), name='activation_mail'), 
) 

邮件是从触发模型下面的函数的观点发送...

models.py:

class SignupProfile(models.Model): 
    objects = SignupManager() 
    user = models.ForeignKey(settings.AUTH_USER_MODEL, unique=True, 
          verbose_name=_("utilisateur")) 
    activation_key = models.CharField(_("clef d'activation"), max_length=40) 

    def send_activation_email(self, request): 
     activation_url = reverse(
      'accounts:activation', 
      kwargs={'activation_key': self.activation_key}) 

     ctx = Context({'site_url': settings.SITE_URL, 
         'activation_key': self.activation_key, 
         'email': self.user.email}) 

     html_tpl = get_template('accounts/mails/activation_email.html') 
     html_content = html_tpl.render(ctx) 
     msg = EmailMultiAlternatives(subject, text_content, 
            settings.DEFAULT_FROM_EMAIL, 
            [self.user.email]) 
     msg.attach_alternative(html_content, 'text/html') 
     msg.send() 

错误发生在用于邮件的模板中...

的index.html:

  <a href="{% url 'accounts:activation_mail' activation_key=activation_key email=email site_url=site_url %}" target="_blank">View this email in your browser</a> 

我已经使用http://pythex.org/,正则表达式的作品。 enter image description here 什么是错误?

+0

我'有点困惑的设置:'view.py'中的单个函数不是视图,它是发送电子邮件的逻辑。这是你的主要'urls.py'文件的整体吗?它应该设置一个'urlpatterns'变量来保存这些url。如果没有看到您用于关键字变量的值,则无法完全回答。 – Tom

+0

我刚刚编辑了我的帖子以获得更多详细信息。 – rom

回答

3

命名组syntax是不正确的。它应与?开始:

^mails/(?P<activation_key>[0-9a-zA-Z]{40})/(?P<email>[a-zA-Z0-9_.+-][email protected][a-zA-Z0-9-]+[.][a-zA-Z0-9-.]+)/(?P<site_url>.*)/$ 
    HERE^        HERE^              HERE^ 

作为一个方面说明,我也觉得过去的通配符匹配应该是非贪婪(不知道这是否事项):

(?P<site_url>.*?) 
1

请尝试使用此规则,因为名称组必须以开头?

r'^mails/(?P<activation_key>[0-9a-zA-Z]{40})/(?P<email>[a-zA-Z0-9_.+-][email protected][a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)/(?P<site_url>.*)/$' 
+1

这就是问题所在,谢谢! – rom