2016-04-30 48 views
2

私はAngularJSフロントエンドからDjangoバックエンドへの通信にDjango REST Framework APIを使用しています。これは本当にうまく動作しています。私はスーパーの有用なdjango-rest-authパッケージとオプションの登録アドオンをインストールしました。認証が機能し、登録がほとんど同様に機能します。Django REST auth:電子メール確認後のdjango-allauthテンプレートのレンダリングエラー

私の問題は、新しいユーザーに送信された確認メールの確認リンクにNoReverseMatchエラーが表示されることです。 django-rest-auth FAQのおかげで、確認がデフォルトでは機能しないことがわかっていて、オーバーライドする必要がありますが、this質問の投稿が何をしたのかが反映されています。私のURL:

from allauth.account.views import confirm_email as allauthemailconfirmation 
... 
url(r'^rest-auth/', include('rest_auth.urls')), 
url(r'^rest-auth/registration/account-confirm-email/(?P<key>\w+)/$', allauthemailconfirmation, name="account_confirm_email"), 
url(r'^rest-auth/registration/', include('rest_auth.registration.urls')), 
... 

そして正確なエラー:

NoReverseMatch at /rest-auth/registration/account-confirm-email/ahhuvpetqmcsd6hjlgrjuru11mwfkpk9sljmfbuprxwz8elnajabr84vusnmdw7r/ 
Reverse for 'account_email' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: [] 

this問題のポスターは、私は1つの答えが適用されるか分かりませんが、同じ問題を持っているようだ、とそうではありません受け入れられたので、それが機能するかどうかはわかりません。

EDIT:以下の最初のコメントに基づいて

、私はaccount_emailにURL名を変更してみました。これはまだエラーになったが、エラーを再度読んだ後、私はallauthビューが確認取り扱った後、デフォルトdjango-allauthテンプレートのレンダリング時にスローされます実現:

Error during template rendering 

In template C:\Python34\lib\site-packages\allauth\templates\base.html, error at line 26 
Reverse for 'account_email' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: [] 
    16  <li>{{message}}</li> 
17  {% endfor %} 
18  </ul> 
19  </div> 
20  {% endif %} 
21 
22  <div> 
23  <strong>Menu:</strong> 
24  <ul> 
25  {% if user.is_authenticated %} 
26 
     <li><a href=" 
     {% url 'account_email' %} 
     ">Change E-mail</a></li> 


27  <li><a href="{% url 'account_logout' %}">Sign Out</a></li> 
28  {% else %} 
29  <li><a href="{% url 'account_login' %}">Sign In</a></li> 
30  <li><a href="{% url 'account_signup' %}">Sign Up</a></li> 
31  {% endif %} 
32  </ul> 
33  </div> 
34  {% block content %} 
35  {% endblock %} 
36  {% endblock %} 

は、だから私は、私が使用したコードを考えるとリンクされたgithubの問題からは、確認メールが正しいことになり、このエラーは、allauthビューがメールアドレスを確認した後で、テンプレートのレンダリング中に発生します。 django-rest-auth登録オプションはdjango-allauthを使用しているので、上記の26-30行のURLはinclude('rest_auth.registration.urls')セットの一部になると期待しています。

allauthビューが確認を正しく処理している場合は、このURLを動作させるために何をする必要があるのか​​分かりません。しかし、私はその推測について間違っている可能性があります。

EDIT 2 私は以下のコメントからアドバイスを取り、すべてのURLをオフに印刷:

>>> show_urls(urls.urlpatterns) 
^api/ 
    ^$ 
    ^\.(?P<format>[a-z0-9]+)/?$ 

    ....autogenerated viewset URLs.... 

^api-browse/ 
    ^login/$ 
    ^logout/$ 
^rest-auth/ 
    ^password/reset/$ 
    ^password/reset/confirm/$ 
    ^login/$ 
    ^logout/$ 
    ^user/$ 
    ^password/change/$ 
^rest-auth/registration/account-confirm-email/(?P<key>[-:\w]+)/$ 
^rest-auth/registration/ 
    ^$ 
    ^verify-email/$ 
    ^account-confirm-email/(?P<key>\w+)/$ 
^$ 

....explicitly added URLs for custom viewset methods... 

^register/$ 
^login/$ 
^logout$ 
^admin/ 

    ....admin URLs.... 

NoReverseMatchエラーは単に上がらないallauth確認メールビューのURLパターン以来、今理にかなって存在しない。

私はポスターがようallauthのURLが含まれていたことがリンクされStackOverflowの質問に気づいた:私はこの行を追加すると、それが働いた

url(r'^accounts/', include('allauth.urls')), 

+0

はそれだけで誤植ではないですか? erorでそれは言う: 'account_email'のためのリバースとあなたはurl name = "account_confirm_email"にこれを持っている、あなたはurlで同じ名前で試すことができますか? –

+0

アイデアをありがとう - 私はそれが 'account_confirm_email'であり、このNoReverseMatchは逆のない基本的なdjango-allauthテンプレートのURLから来ると思う。私はこのすべてを概説した元の投稿にいくつかの詳細を追加しました – dkhaupt

+1

なぜエラーが出るのか理解できませんが、これをデバッグするためにshow_urlsコマンドでurlパターンをチェックすることはできます。このコマンドは、[django-extenstions](http://django-extensions.readthedocs.io)をインストールした場合に利用可能です。 –

答えて

3

上記の最終編集を要約すると、django-allauthデフォルトのメール確認テンプレートを使用しようとしていたが、明示的にallauthのURLが含まれていないという問題がありました。

私はdjango-rest-frameworkの登録オプションはallauthを使用していますので、そのステップが必要だったとは思いませんでしたが、account_confirm_emailビューはとにかく上書きしなければならないので、そのパッケージの著者は、ユーザーが/verify_email/の鍵をPOSTすることを期待しているようです。allauth確認メールテンプレートを利用すること

は、urls.pyに次のものがあります。

url(r'^accounts/', include('allauth.urls')), 
+0

私はあなたを愛していると思います。私は大混乱に瀕していた。 –

+0

うれしかった!私は私のdjango-rest-authの質問の多くは答えられていないことがわかったので、私はそれらを把握して回答を投稿しようとします。 – dkhaupt

関連する問題