Встроенный в Django url 'logout' обратный URL возвращает относительный путь
Искал, но не могу найти этот конкретный вопрос. Я создал отдельное приложение для аутентификации пользователя (имя: user) и включил URLS с помощью django.contrib.auth.urls. Вход в систему работает. Выход из системы не работает.
При использовании именованного представления {% url 'login' %}
путь является абсолютным и работает нормально (т.е. http://host/user/login).
При использовании именованного представления {% url 'logout' %}
в том же шаблоне, он получает относительный путь к моему отображаемому приложению. (т.е. http://host/app1/user/login)
Django Directory:
- 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',
]
URLS приложения 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
]
User App URLS (user/urls.py - ничего не добавлено, так как используется из django.contrib.auth.urls):
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
я выхожу из системы и перенаправляюсь правильно.
Есть какие-нибудь мысли? Большое спасибо!
@wfh18 решил проблему. Перемещение моих шаблонов в шаблоны с разграничением имен и соответствующее обновление путей внутри шаблонов решило проблему.
From:
- djangoProject
- djangoProject
- app1
- templates
- index.html
- base.html
- topbar.html
- footer.html
- sidebar.html
- user
- templates
- login.html
to:
- 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' %}
и т.д.