2016-05-25 13 views
1

Ich möchte die Benutzerauthentifizierung mit Django (1.9) einrichten. Wie in der Dokumentation beschrieben enthalten ich die Auth-Ansicht in meinem Projekt urls.py wieDjango Auth: Wohin mit benutzerdefinierten Vorlagen?

urlpatterns = [ 
    ..., 
    url('^accounts/', include('django.contrib.auth.urls')), 
    ..., 
] 

wie die documentation beschreibt, muss man benutzerdefinierte Vorlagen für die Auth Ansichten schreiben. Ich stelle diese Vorlagen in das Verzeichnis myproject/templates/registration/. Das Problem ist nun, dass diese Vorlagen, da sie der vordefinierten Namenskonvention folgen, mit den Admin-Vorlagen für Auth-Ansichten kollidieren. Z.B. Wenn ich dem Link CHANGE PASSWORD im Admin folge, wird die Admin-Ansicht mit meiner eigenen Vorlage gerendert. Wie kann ich meine benutzerdefinierten Vorlagen benennen, damit sie den Administrator nicht beeinträchtigen?

Antwort

3

Sie sollten Vorlagennamen für integrierte Funktionen außer Kraft setzen:

urlpatterns = [ 
    url(
     '^change-password/', 
     auth_views.password_change, 
     {'template_name': 'myproject/registration/change-password.html'} 
    ) 
] 

Wie der doc beschreibt, müssen Sie die nächsten Vorlagen in urls.py verwenden:

^login/$ [name='login'] 
^logout/$ [name='logout'] 
^password_change/$ [name='password_change'] 
^password_change/done/$ [name='password_change_done'] 
^password_reset/$ [name='password_reset'] 
^password_reset/done/$ [name='password_reset_done'] 
^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$ [name='password_reset_confirm'] 
^reset/done/$ [name='password_reset_complete'] 
+0

Ok Ich dachte an diese Lösung, aber gibt es keine Möglichkeit, die URLs zu verwenden und die Vorlagen zu trennen? – Jarno

+0

A hat keine andere Lösung gefunden :( –

1

Wie Aleksander Gordienko hingewiesen out, einschließlich jeder Auth-Ansicht manuell und Ändern der Vorlage Name scheint die beste Lösung zu sein. Um Ihnen das Eingeben und manuelle Extrahieren der Auth-Ansichtsnamen zu ersparen, folgen hier die URL-Muster, in denen die Vorlagen unter ihrem ursprünglichen Namen aber im Verzeichnis project/myapp/templates/myapp/registration/ gespeichert werden.

from django.contrib.auth import views as auth_views 

urlpatterns = [ 
    url(r'^accounts/login/$', auth_views.login, 
     {'template_name': 'myapp/registration/login.html'}, name='login'), 
    url(r'^accounts/logout/$', auth_views.logout, 
     {'template_name': 'myapp/registration/logout.html'}, name='logout'), 
    url(r'^accounts/password_change/$', auth_views.password_change, 
      {'template_name': 'myapp/registration/password_change_form.html', 
      'post_change_redirect': '/accounts/password_change/done/'}, 
      name='password_change'), 
    url(r'^accounts/password_change/done/$', auth_views.password_change_done, 
      {'template_name': 'myapp/registration/password_change_done.html'}, 
      name='password_change_done'), 
    url(r'^accounts/password_reset/$', auth_views.password_reset, 
      {'template_name': 'myapp/registration/password_reset_form.html'}, 
      name='password_reset'), 
    url(r'^accounts/password_reset/done/$', auth_views.password_reset_done, 
      {'template_name': 'myapp/registration/password_reset_done.html'}, 
      name='password_reset_done'), 
    url(r'^accounts/reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', 
     auth_views.password_reset_confirm, 
      {'template_name': 'myapp/registration/password_reset_confirm.html'}, 
      name='password_reset_confirm'), 
    url(r'^accounts/reset/done/$', auth_views.password_reset_complete, 
      {'template_name': 'myapp/registration/password_reset_complete.html'}, 
      name='password_reset_complete'), 
    ..., 
]