Как ссылаться на путь (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'

Вот процесс (из документации)

  1. Django определяет корневой модуль URLconf для использования. Обычно это значение параметра ROOT_URLCONF...
  2. .
  3. Django загружает этот модуль Python и ищет переменную urlpatterns. Это должна быть последовательность экземпляров django.urls.path() и/или django.urls.re_path().
  4. .
  5. Django перебирает все шаблоны URL по порядку и останавливается на первом, который соответствует запрашиваемому URL, сравнивая с path_info.
  6. Если один из шаблонов 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/.

Вернуться на верх