2016-02-02 16 views
6

Sto utilizzando login e logout django integrati. Nel mio progetto/urls.py ho aggiunto url per login e logout.perché logg_out.html non si sovrappone alla registrazione di django?

from django.conf.urls import include, url 
from account import views 
from django.contrib.auth import views as auth_views 
from django.contrib import admin 
urlpatterns = [ 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^$',views.index,name='Index'), 
    url(r'^accounts/login/$',auth_views.login,name='login'), 
    url(r'^accounts/logout/$',auth_views.logout,name='logout'), 
    url(r'^accounts/register/$',views.register,name='register'), 
    url(r'^accounts/profile/$',views.profile,name='profile'),  
] 

e ho la cartella dei modelli all'interno della cartella dell'app account. Ho struttura di directory come questo

account 
    -templates 
     -registration 
      -login.html 
      -logged_out.html 
      -register.html 
     -rest_html_files 
-rest files 

ho letto docs Django che dicono che per il login() modello predefinito è la registrazione/login.html che sta lavorando bene nel mio progetto e il logout() modello predefinito è di registrazione/logged_out.html se non viene fornito alcun argomento ma ogni volta che si fa clic sul pulsante di disconnessione (che ha un href = {% url 'logout'%}) viene reindirizzato alla pagina di disconnessione dell'amministratore piuttosto che alla mia pagina di disconnessione personalizzata. cosa potrebbe essere sbagliato ??

+0

Potrebbe pubblicare il codice per la vista? La vista –

+1

non deve fare nulla in questo caso perché sto usando django auth. – rdRahul

risposta

10

Il django.contrib.admin applicazione dispone anche di un modello registration/logged_out.html.

Per garantire che il modello dal proprio 'conto' app, viene utilizzato, assicurarsi che sia al di sopra 'django.contrib.admin' nel vostro ambiente INSTALLED_APPS.

INSTALLED_APPS = (
    'account', 
    ... 
    'django.contrib.admin', 
    ... 
) 

L'applicazione del modello caricatore passa attraverso le applicazioni in INSTALLED_APPS e directory dei modelli di ogni applicazione fino a quando non trova una corrispondenza. Pertanto, se l'amministratore è sopra la tua app, Django utilizzerà il modello dall'amministratore anziché dalla tua app.

+1

grazie per la risposta @ Alasdair ma mi sono rotto la testa ore prima di fare la domanda e la mia app è lì nelle app installate. Per il tuo commento conosco già l'attributo next_page tutto quello che volevo chiedere è perché, se l'accesso è annullato, perché il logout non funziona allo stesso modo. – rdRahul

+0

Avere la tua app in 'INSTALLED_APPS' non è sufficiente. Deve essere ** sopra ** 'django.contrib.admin'. Il tuo modello di accesso è attualmente utilizzato perché l'app di amministrazione non ha un modello 'registration/login.html'. – Alasdair

+0

grazie !!! che ha fatto il trucco. Mi dispiace che non ho capito prima e mi dispiace, non mi hanno lasciato invitare la tua risposta .. ;-) – rdRahul

0

È possibile impostare per reindirizzare a una pagina successiva come questo:

url(r'^accounts/logout/$',auth_views.logout, name='logout', 
          {'next_page': '/path_to_your_page/'}) 

Secondo: https://docs.djangoproject.com/en/1.9/topics/auth/default/#django.contrib.auth.views.logout

O

<a href="{% url 'logout' %}?next=/path_to_the_page"> Logout</a> 
+0

grazie kushtrimh! ma l'avevo già capito. Tutto quello che sto chiedendo è che cosa potrebbe essere probabile perché questo metodo non funziona come dovrebbe essere. – rdRahul