#django #django-authentication
Вопрос:
Искал, но не могу найти эту конкретную проблему. Я создал отдельное приложение для аутентификации пользователя (имя: пользователь) и включил URL-адреса, используя URL-адреса django.contrib.auth. Вход в систему работает. Выход из системы завершается неудачно.
При использовании именованного представления {% url 'login' %}
путь является абсолютным и работает нормально (т. е. /пользователь/логин).
При использовании именованного представления {% url 'logout' %}
в том же шаблоне он получает относительный путь к моему отображаемому приложению. (т. е. пользователь/логин)
Каталог Django:
- djangoProject
- djangoProject
- app1
- user
Настройки приложения Django (djangoProject/settings.py):
INSTALLED_APPS = [
'crispy_forms',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'user',
'app1',
]
URL-адреса приложений Django (djangoProject/urls.py)
urlpatterns = [
path('app1/', include('app1.urls')),
path('admin/', admin.site.urls),
path('user/', include("django.contrib.auth.urls")),
path('user/', include("user.urls")) // in case I add custom pages
]
URL-адреса пользовательских приложений (user/urls.py — ничего не добавлено, так как используется из django.contrib.auth.url):
urlpatterns = [
]
Представления пользовательских приложений (user/views.py — ничего не добавлено. используя встроенный django.contrib.auth):
Теперь, в app1/templates/base.html, я использую следующее:
{% url 'login' %}
— который генерирует URL-адрес — http://host/user/login/
{% url 'logout' %}
— который генерирует URL-адрес — http://host/app1/user/logout
Если я вручную введу URL http://host/user/logout
-адрес, я выйду из системы и правильно перенаправлюсь.
Есть какие-нибудь мысли? Большое спасибо!
Комментарии:
1. Возможно, попробуйте создать каталог шаблонов уровня проекта, установите параметр «Директория шаблонов» в settings.py в ‘DIRS’: [str(BASE_DIR.joinpath(‘шаблоны’))] и поместите свой base.html там, внутри. Или правильно назовите пространство имен шаблонов уровня приложения: app1/templates/app1/base.html вместо app1/templates/base.html
Ответ №1:
@wfh18 решил проблему. Перемещение моих шаблонов в шаблон с пространством имен и соответствующее обновление путей внутри шаблонов решили проблему.
От:
- djangoProject
- djangoProject
- app1
- templates
- index.html
- base.html
- topbar.html
- footer.html
- sidebar.html
- user
- templates
- login.html
Для:
- djangoProject
- djangoProject
- app1
- templates
- app1
- index.html
- base.html
- topbar.html
- footer.html
- sidebar.html
- user
- templates
- user
- login.html
И изменение любых ссылок на шаблоны с {% extends 'base.html' %}
на {% extends 'app1/base.html' %}
и т. Д