Страница 404, когда проект Django WSGIScriptAlias не / [duplicate]
Я изучаю Django. Я работаю на Python 3.12.2, Django 5.0.3, Apache HTTPD 2.4.58, Windows 11. Я только что выполнил startproject
(startapp
еще нет). Вот моя текущая структура каталогов:
D:\dev\htdocs # Apache HTTPD DocumentRoot
├───... # Other directories
│
└───nutrihub_pyvenv # venv container for Django project
├───.venv # I use pipenv
│
└───nutrihub
│ db.sqlite3
│ manage.py
│ Pipfile
│ Pipfile.lock
│
└───nutrihub
asgi.py
settings.py
urls.py
wsgi.py
__init__.py
Вот мой конфиг Apache:
LoadFile "c:/Python312/python312.dll"
LoadModule wsgi_module "d:/dev/htdocs/nutrihub_pyvenv/.venv/Lib/site-packages/mod_wsgi/server/mod_wsgi.cp312-win_amd64.pyd"
WSGIScriptAlias /nhub "d:/dev/htdocs/nutrihub_pyvenv/nutrihub/nutrihub/wsgi.py"
WSGIPythonHome "d:/dev/htdocs/nutrihub_pyvenv/.venv"
WSGIPythonPath "d:/dev/htdocs/nutrihub_pyvenv/nutrihub;"
WSGIApplicationGroup %{GLOBAL}
<Directory "d:/dev/htdocs/nutrihub_pyvenv/nutrihub/">
<Files "wsgi.py">
Require all granted
</Files>
</Directory>
D:\dev\htdocs\nutrihub_pyvenv\nutrihub\nutrihub\settings.py
выглядит так (показывает только несколько значений):
DEBUG = True
ALLOWED_HOSTS = ['*', 'localhost', '127.0.0.1']
Когда я выполняю следующую команду:
D:\dev\htdocs\nutrihub_pyvenv\nutrihub
(.venv) λ py manage.py runserver
Watching for file changes with StatReloader
Performing system checks...
System check identified no issues (0 silenced).
You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
March 26, 2024 - 06:56:13
Django version 5.0.3, using settings 'nutrihub.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
... Я вижу страницу с сообщением The install worked successfully! Congratulations! You are seeing this page because DEBUG=True is in your settings file and you have not configured any URLs.
по адресу http://localhost:8000/
.
Но когда я запускаю Apache HTTPD и перехожу к http://localhost/nhub
, я вижу сообщение:
Page not found (404)
Request Method: GET
Request URL : http://localhost/nhub/
Using the URLconf defined in nutrihub.urls, Django tried these URL patterns, in this order:
admin/
The empty path didn’t match any of these.
You’re seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.
Однако, когда я изменяю WSGIScriptAlias
(все остальное без изменений):
WSGIScriptAlias / "d:/dev/htdocs/nutrihub_pyvenv/nutrihub/nutrihub/wsgi.py"
... и перейдите к http://localhost
, я увижу сообщение об успехе.
Я хотел бы знать, что я упускаю, когда выдаю WSGIScriptAlias
за /nhub
.
Этот вопрос не является дубликатом Django - The current URL, , didn't match any of these, как было предложено SO, поскольку этот вопрос и ответ сравнивают, почему с разными WSGIScriptAlias результаты отличаются. Я уже нашел ответ и задокументировал его для тех, кто изучает Django в будущем.