имя шаблона в LogoutView не работает на django2.1 питон3.7



Ниже приведена настройка по умолчанию в django.ВНО.автор.Просмотры.LogoutViews,



template_name = 'registration/logged_out.html'


Я настраиваю свое приложение urls.py вот так:



from django.urls import path
from . import views

from django.conf import settings

from django.contrib.auth.views import LoginView, LogoutView

app_name = 'account'
urlpatterns = [
#path("login/", views.user_login, name="user_login"),
path("login/", LoginView.as_view(), name="user_login"),
path("nlogin/", LoginView.as_view(), {"template_name":"account/login.html"}),
path("logout/", LogoutView.as_view(), name="user_logout"),
path("logoutt/", LogoutView.as_view(), {"template_name":"account/logout.html"}),
]


"template_name": "учетная запись/логин.html "работает нормально, но "template_name": "учетная запись/выход из системы.html " кажется, нет никакой разницы, что не так с моим кодом?

618   2  

2 ответов:

При использовании варианта , основанного на классе , параметры представления передаются через .as_view (так называемый **initkwargs) метод:

from django.urls import path
from . import views

from django.conf import settings

from django.contrib.auth.views import LoginView, LogoutView

app_name = 'account'

urlpatterns = [
    #path("login/", views.user_login, name="user_login"),
    path("login/", LoginView.as_view(), name="user_login"),
    path("nlogin/", LoginView.as_view(template_name='account/login.html')),
    path("logout/", LogoutView.as_view(), name="user_logout"),
    path("logoutt/", LogoutView.as_view(template_name='account/logout.html')),
]

В противном случае параметры окажутся в self.kwargs, и представление на основе класса не проверяет их.

Документация по LoginView [Django-doc] упоминает об этом, а также список параметров, которые вы можете передать как **initkwargs.

Согласно совету Виллема ван Онсема, я обнаружил, что ключевая проблема заключается в том, что я перепутал два способа urlpatterns, например:

  1. Url() и тип регулярного выражения в urls.py (я узнал в Django 1.10.1 учебник)

    from django.conf.urls import url
    from django.contrib.auth import views
    urlpatterns = [
        url(r"^login/$", views.login, {"template_name"="account/login.html"}, name='user_login'),
    ]
    
  2. Path () введите urls.py (django 2.1 docs)

    from django.urls import path
    from django.contrib.auth.views import LoginView
    urlpatterns = [
        path("login/", LoginView.as_view(template_name="account/login.html"),name="user_login"),
    ]
    

Очевидно, что следует отметить два основных различия:

  1. импорт url из django.конф.URL-адреса, но путь импорта из django.адреса прямолинейно, и путь тип является новым в django 2.0, путь кажется более простым
  2. в django 2.1 настройки LoginView и LogoutView передают as_view (), по сравнению с более старыми представлениями expression .login, {"template_name" = " учетная запись / логин.html"}, проще тоже

Comments

    Ничего не найдено.