2016-02-02 25 views
6

Używam wbudowanego logowania django i wylogowywania. W moim projekcie/urls.py dodałem adresy URL zarówno do logowania, jak i wylogowywania.dlaczego logged_out.html nie przesłania w rejestracji 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'),  
] 

i mam folder szablonów w folderze aplikacji mojego konta. Mam strukturę katalogów jak ten

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

Czytałem docs django, które mówią, że do logowania() Domyślny szablon jest rejestracja/login.html który działa dobrze w moim projekcie i wylogowania() Domyślny szablon jest rejestracja/logged_out.html, jeśli nie podano żadnych argumentów, ale po kliknięciu przycisku Logout (który ma href = {% url 'wylogowania'%}) przekierowuje na stronę wylogowania administratora zamiast na moją stronę wylogowania niestandardowego. co może być nie tak?

+0

Czy możesz opublikować kod widoku? –

+1

widok nie musi w tym przypadku nic robić, ponieważ używam django auth. – rdRahul

Odpowiedz

10

Aplikacja django.contrib.admin posiada również registration/logged_out.html szablonu.

Aby upewnić się, że szablon z konta „” aplikacji, jest używany, upewnij się, że jest powyżej „django.contrib.admin” w ustawieniach INSTALLED_APPS.

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

Aplikacja szablon ładowarka przechodzi przez aplikacje w INSTALLED_APPS i każdej aplikacji w katalogu szablonu aż znajdzie dopasowanie. Dlatego jeśli administrator znajduje się nad twoją aplikacją, Django użyje tego szablonu od administratora zamiast z twojej aplikacji.

+1

dzięki za odpowiedź @Alasdair, ale mam rozbił moje głowy godzin przed zadając pytanie, a moja aplikacja jest tam w Zainstalowane aplikacje. Do twojego komentarza już znam atrybut next_page wszystko, co chciałem zapytać, to dlaczego, jeśli logowanie jest nadpisane, to dlaczego wylogowanie nie działa w ten sam sposób. – rdRahul

+0

Posiadanie aplikacji w 'INSTALLED_APPS' nie wystarczy. Musi być ** powyżej ** "django.contrib.admin". Twój szablon logowania jest obecnie używany, ponieważ aplikacja administratora nie ma szablonu "registration/login.html". – Alasdair

+0

dziękuję !!!, który zrobił trick.sorry, którego wcześniej nie zrozumiałem i przepraszam, nie pozwolili mi uzyskać odpowiedzi na twoje pytanie; ;-) – rdRahul

0

Można ustawić przekierowanie go na następnej stronie tak:

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

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

Albo

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

dzięki kushtrimh! ale już to rozgryzłem. Pytam tylko, co może być prawdopodobne, ponieważ ta metoda nie działa tak, jak powinna. – rdRahul