Как ссылаться на путь (URL) в Django? Но этот путь находится не в базовом приложении, а в другом приложении
В базовом приложении, которое я называю "mywebsite" (то, которое содержит настройки проекта django), есть файл urls.py. Но я не хочу ссылаться на этот файл, я хочу ссылаться на urls.py в другом приложении, которое я называю "account".
Для базового файла я бы сослался, например, как {% url'login' %}. Как мне сослаться на другой? Может быть, {% account.url 'login' %}?
Я пробовал {% account.url 'login' %} и {% account/url 'login' %}
Неважно, я просто добавил в базовый файл urls.py: path('', include("account.urls"))
Я вижу, что вы уже ответили на свой вопрос, но без дальнейших деталей или объяснений. Я предоставлю необходимый контекст.
У вас есть пакет проекта. Эта папка содержит файлы, которые влияют на все приложение (веб-сайт, а не только приложение). Внутри у нас есть следующие файлы: settings, wsgi, asgi и urls.
В файле urls.py (также называемом модулем URLconf) вы управляете маршрутизацией вашего приложения, то есть отображением между выражениями путей URL к функциям Python (вашим представлениям).
Фреймворк Django знает, где искать этот файл, поскольку он установлен в файле settings.py:
ROOT_URLCONF = 'django_project.urls'
Вот процесс (из документации)
- Django определяет корневой модуль URLconf для использования. Обычно это значение параметра ROOT_URLCONF... .
- Django загружает этот модуль Python и ищет переменную urlpatterns. Это должна быть последовательность экземпляров django.urls.path() и/или django.urls.re_path(). .
- Django перебирает все шаблоны URL по порядку и останавливается на первом, который соответствует запрашиваемому URL, сравнивая с path_info.
- Если один из шаблонов URL совпадает, Django импортирует и вызывает заданное представление, которое является функцией Python (или представлением на основе класса)...
Но помимо пакета проекта у вас также есть приложения. Каждое приложение также может иметь модуль URLconf (app/urls.py).
Чтобы Django знал маршрутизацию к этим приложениям, вы должны включить их в глобальный файл urls.py (из пакета проекта).
Как вы это делаете? С помощью функции include(). Как вы упомянули в своем собственном ответе, код таков:
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('', include("account.urls")),
]
Вы включаете пути учетных записей в глобальный модуль URLconf.
Таким образом, когда пользователь набирает www.your-domain.com/
, он получает доступ к маршрутам приложений accounts
.
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('accounts/', include("account.urls")),
]
Если вместо этого сделать так, то пользователь должен набрать: www.your-domain.com/accounts/
.