2014-01-21 26 views
1

我試圖在執行中django.contrib.auth.viewspassword_reset如描述所示https://github.com/django/django/blob/master/django/contrib/auth/views.py#L133自定義密碼重置視圖類歸國ImproperlyConfigured例外

但我有絕對與此沒有運氣,因爲我不斷收到以下異常:

Exception Type: ImproperlyConfigured 
Exception Value: The included urlconf tutorial.urls doesn't have any patterns in it 

我的項目urls.py(教程):

urlpatterns = patterns('', 
    url(r'^adminp/', include('adminApp.urls')), 
    url(r'^mobile/', include('mobileApp.urls')), 
) 

我的urls.py爲應用程序:

urlpatterns = patterns('', 
    .... 
    url(r'^login/$', UserLoginView.as_view(), name='admin_user_login'), 
    url(r'^logout/$', UserLogoutView.as_view(), name='admin_user_logout'), 
    url(r'^password/reset/$', UserPasswordResetView.as_view(), name='admin_password_reset'), 
    url(r'^password/reset/done/$', UserPasswordResetDoneView.as_view(), name='admin_password_reset_done'), 
    .... 

而我的等級:

class UserPasswordResetView(FormView): 
    template_name = 'adminApp/registration/password_reset_form.html' 
    form_class = MyPasswordResetForm 
    email_template_name = 'adminApp/registration/password_reset_email.html' 
    subject_template_name = 'changeMe' 
    post_reset_redirect = reverse('adminApp:admin_password_reset_done') 

    def form_valid(self, form): 
     password_reset(self.request) 
     return super(UserPasswordResetView, self).form_valid(form) 

回溯:

File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in get_response 
    101.     resolver_match = resolver.resolve(request.path_info) 
File "/Library/Python/2.7/site-packages/django/core/urlresolvers.py" in resolve 
    318.    for pattern in self.url_patterns: 
File "/Library/Python/2.7/site-packages/django/core/urlresolvers.py" in url_patterns 
    346.   patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module) 
File "/Library/Python/2.7/site-packages/django/core/urlresolvers.py" in urlconf_module 
    341.    self._urlconf_module = import_module(self.urlconf_name) 
File "/Library/Python/2.7/site-packages/django/utils/importlib.py" in import_module 
    40.   __import__(name) 
File "/Users/Jimbo/Dropbox/Sandbox/tutorial/tutorial/urls.py" in <module> 
    12.  url(r'^adminp/', include('adminApp.urls')), 
File "/Library/Python/2.7/site-packages/django/conf/urls/__init__.py" in include 
    26.   urlconf_module = import_module(urlconf_module) 
File "/Library/Python/2.7/site-packages/django/utils/importlib.py" in import_module 
    40.   __import__(name) 
File "/Users/Jimbo/Dropbox/Sandbox/tutorial/adminApp/urls.py" in <module> 
    3. from adminApp import views 
File "/Users/Jimbo/Dropbox/Sandbox/tutorial/adminApp/views.py" in <module> 
    44. class UserPasswordResetView(FormView): 
File "/Users/Jimbo/Dropbox/Sandbox/tutorial/adminApp/views.py" in UserPasswordResetView 
    49.  post_reset_redirect = reverse('admin_password_reset_done') 
File "/Library/Python/2.7/site-packages/django/core/urlresolvers.py" in reverse 
    509.  return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)) 
File "/Library/Python/2.7/site-packages/django/core/urlresolvers.py" in _reverse_with_prefix 
    387.   possibilities = self.reverse_dict.getlist(lookup_view) 
File "/Library/Python/2.7/site-packages/django/core/urlresolvers.py" in reverse_dict 
    296.    self._populate() 
File "/Library/Python/2.7/site-packages/django/core/urlresolvers.py" in _populate 
    262.   for pattern in reversed(self.url_patterns): 
File "/Library/Python/2.7/site-packages/django/core/urlresolvers.py" in url_patterns 
    350.    raise ImproperlyConfigured("The included urlconf %s doesn't have any patterns in it" % self.urlconf_name) 

異常類型:AT /的AdminP /密碼ImproperlyConfigured/RESET/ 異常值:包括URL配置tutorial.urls沒有按沒有任何圖案 現在,如果我註釋掉post_reset_redirect它工作正常,所以我認爲它不是真的找到admin_password_reset_done名稱?爲什麼是這樣?

UPDATE:

我取代reversereverse_lazy作爲根據本https://stackoverflow.com/a/7430924/531203,但它調用其可以是或不是在相同的域中的另一個錯誤:

Exception Type: NoReverseMatch 
Exception Value: Reverse for 'password_reset_done' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: [] 

reverse_lazy使用它假設post_reset_redirect變量爲無並且設置爲:https://github.com/django/django/blob/master/django/contrib/auth/views.py#L144

+0

粘貼的'urls.py'是'tutorial.urls'? – iMom0

+0

@ user995394,它是我稱爲app1的urls.py,它具有該類。 – JavaCake

+0

我認爲問題出在您的網址配置的其他地方。異常消息中提到的'tutorial.urls'在哪裏?你在這條線上看到的問題是因爲'reverse()',它經歷了你所有的url並且經常可以發現問題。它不一定與'admin_password_reset_done'有關。 –

回答

1

您的原始問題是與循環進口。 reverse_lazy固定。

您似乎沒有正確使用password_reset函數。你鏈接的函數期望被傳遞關鍵字參數,它不會看到你的類中定義的變量。此外,你忽略了返回值 - 你應該返回它。

我對auth系統的這一部分並不熟悉,但這些看起來都是基於函數的常規視圖,所以我只需編寫自己的視圖並將相應的參數傳遞給password_reset

def my_password_reset_view(request): 
    return password_reset(request, 
     template_name='adminApp/registration/password_reset_form.html', 
     email_template_name='adminApp/registration/password_reset_email.html', 
     subject_template_name='changeMe', 
     post_reset_redirect=reverse('adminApp:admin_password_reset_done'), 
     password_reset_form=MyPasswordResetForm) 

與其他視圖類似。

+0

你能給我舉一個如何調用函數的例子? – JavaCake

+0

基於類的視圖是否可能? – JavaCake

+0

當然,但你不會真正使用任何CBV的功能。您可以從'View'繼承,並從'get()'和'post()'同時調用'password_reset'。或者你可以重寫'dispatch()'。 –