2016-04-08 106 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