2017-06-14 76 views
0

我想用一個名稱空間管理一個單獨的urls.py。 (1)是由Django安裝的系統範圍的urls.py,並且我做了(2)有索引頁和「accounts」認證頁面。帶名字空間的Django認證urls.py

(1)urls.py包括與命名空間common.url 「常用」

url(r'^', include('common.urls', namespace='common')), 

(2)urls.py聲明如下:

url(r'^accounts/', include('django.contrib.auth.urls')), 
url(r'^accounts/register/$', UserCreateView.as_view(), name='register'), 
url(r'^accounts/register/done/$', UserCreateDoneTemplateView.as_view(), name='register_done'), 

以下URL是否正確通過反相Django的。

​​

但是,「common:password_change_done」沒有顛倒過來,我遇到了「NoReverseMatch」錯誤。

當然,url聲明放在系統範圍的urls.py(1)中。我只是想知道是否可以將它分成一個單獨的應用程序(2)。

謝謝。

+0

你可以顯示完整的錯誤和追溯? – knbk

+0

Django驗證網址已經在'auth'命名空間中。試試'{%url'auth:登錄'%}'或'{%url'common:auth:login'%}' – Alasdair

+0

@Alasdair對於遲到的反饋,我很遺憾。 我沒有包含auth.urls,但我知道以下視圖需要使用正確的命名空間來設置「success_url」。 PasswordChangeView。as_view( success_url = reverse_lazy( '共同:password_change_done')), PasswordResetView.as_view( success_url = reverse_lazy( '共同:password_reset_done')), PasswordResetConfirmView.as_view( success_url = reverse_lazy( '共同:password_reset_complete' )), – nasiajai

回答

0

我想我的問題和答案含糊不清,因爲我的英語水平很差。

首先,我想讓我的網址,像這樣「/帳戶」前綴:

/accounts/register 
/accounts/login 
/accounts/logout 

我想重用「django.contrib.auth.urls」與像命名空間「共同」或'帳號分開管理網址'

但是,以下視圖的成功url是硬編碼的。這意味着我們必須遵循他們的規則命名約定。

PasswordChangeView 
PasswordResetView 
PasswordResetConfirmView 

例如,在 「PasswordChangeView」 情況下被實現如下:

class PasswordChangeView(PasswordContextMixin, FormView): 
    form_class = PasswordChangeForm 
    success_url = reverse_lazy('password_change_done') 
    template_name = 'registration/password_change_form.html' 
    title = _('Password change') 
    ... omitted ... 

因此,我決定不包括 'django.contrib.auth.urls' 和我聲明URL模式我自己。

我想過定義繼承的「PasswordChangeView」類,但我知道Django支持pass成員視圖類。

url(
    r'^password_change/$', 
    PasswordChangeView.as_view(success_url=reverse_lazy('account:password_change_done')), 
    name='password_change' 
), 

現在,我沒有看到反向錯誤。

我希望我的問題/答案可能對別人有幫助。謝謝。