Django приложение 404 ошибка не распознает новые приложения url и views
Привет Я пытаюсь создать свой первый проект Django и испытываю проблемы с тем, чтобы заставить приложение работать внутри моего проекта Django. Я просто пытаюсь отобразить url-код 8000/home1/hello/ для отображения основного текста "hello world", но не могу этого сделать. Я продолжаю получать этот код ошибки:
"Используя URLconf, определенный в web3.urls, Django попробовал эти шаблоны URL, в таком порядке:
admin/ Текущий путь, home1/hello, не соответствует ни одному из этих путей."
Вот что я сделал:
- создал проект django под названием web3
- создал приложение под названием home1 и добавил файл urls.py в это приложение
- обновите папку settings.py в INSTALLE_APPS, чтобы в ней появился файл 'home1.apps.Home1Config',
- home1 > urls.py включает этот код:
from django.urls import path from . import views
urlpatterns = [
path('hello/', views.hello_world, name="hello_world"),
]
- home1>views.py включает этот код:
from django.shortcuts import render
from django.http import HttpResponse
def hello_world(request):
return HttpResponse("you finally did it justin")
6.web3> urls.py содержит такой код:
from django.contrib import admin
from django.urls import path, include
from home1.views import hello_world # Import the hello_world view function
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('home1.urls')),
]
- Я уверен, что мой набор файлов верен, поскольку я использовал основной код для создания файлов (django-admin startproject web3) и (python manage.py startapp home1)
Я совсем запутался в этом вопросе... Любая помощь будет очень признательна!!!
Путь "home1/hello/"
не существует на вашем сервере. Существуют только "hello/"
и "admin/"
.
Распространено заблуждение, что если включить URLconf в корневой URLconf, например, так:
urlpatterns = [
#•••Rest of code•••
path('', include('home1.urls')),
]
Что все маршруты из этого приложения будут начинаться с названия приложения - например, "home1"
в приведенном выше примере.
Это не так. Чтобы существовало базовое имя, вы должны указать базовое имя.
urlpatterns = [
#•••Rest of code•••
path('home1/', include('home1.urls')),
]
Теперь все маршруты из этого приложения будут начинаться с "home1"
.
Путь "home1/hello/"
не существует на вашем сервере. Существуют только "hello/"
и "admin/"
.
Распространено заблуждение, что если включить URLconf в корневой URLconf, например, так:
urlpatterns = [
#•••Rest of code•••
path('', include('home1.urls')),
]
Что все маршруты из этого приложения будут начинаться с названия приложения - например, "home1"
в приведенном выше примере.
Это не так. Чтобы существовало базовое имя, вы должны указать базовое имя.
urlpatterns = [
#•••Rest of code•••
path('home1/', include('home1.urls')),
]
Теперь все маршруты из этого приложения будут начинаться с "home1"
.
Основная проблема заключается в том, что шаблон URL home1/hello/
не совпадает, потому что web3/urls.py
включает home.urls
в корневой путь URL, это означает, что home1/hello/
будет фактически сопоставлен как hello/
из корня
Чтобы исправить это, необходимо выполнить следующие действия:
- убедитесь, что структура вашего проекта выглядит следующим образом:
web3/
manage.py
web3/
__init__.py
settings.py
urls.py
wsgi.py
home1/
__init__.py
admin.py
apps.py
models.py
tests.py
views.py
urls.py
migrations/
__init__.py
- убедитесь, что
home1
добавлено кINSTALLED_APPS
- ваша
home1/urls.py
должна выглядеть следующим образом :
from django.urls import path
from . import views
urlpatterns = [
path('hello/', views.hello_world, name='hello_world'),
]
- включите
home1.urls
вweb3/urls.py
и используйтеhome1/
в качестве префикса:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('home1/', include('home1.urls')),
]
и, наконец, ваша home1/views.py
должна выглядеть так:
from django.shortcuts import render
from django.http import HttpResponse
def hello_world(request):
return HttpResponse("you finally did it justin")
Надеюсь, это поможет вам.
Основная проблема заключается в том, что шаблон URL home1/hello/
не совпадает, потому что web3/urls.py
включает home.urls
в корневой путь URL, это означает, что home1/hello/
будет фактически сопоставлен как hello/
из корня
Чтобы исправить это, необходимо выполнить следующие действия:
- убедитесь, что структура вашего проекта выглядит следующим образом:
web3/
manage.py
web3/
__init__.py
settings.py
urls.py
wsgi.py
home1/
__init__.py
admin.py
apps.py
models.py
tests.py
views.py
urls.py
migrations/
__init__.py
- убедитесь, что
home1
добавлено кINSTALLED_APPS
- ваша
home1/urls.py
должна выглядеть следующим образом :
from django.urls import path
from . import views
urlpatterns = [
path('hello/', views.hello_world, name='hello_world'),
]
- включите
home1.urls
вweb3/urls.py
и используйтеhome1/
в качестве префикса:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('home1/', include('home1.urls')),
]
и, наконец, ваша home1/views.py
должна выглядеть так:
from django.shortcuts import render
from django.http import HttpResponse
def hello_world(request):
return HttpResponse("you finally did it justin")
другие вещи, которые приходят мне на ум:
- найдите опечатки в именах файлов, функций и конфигурации
- перезапустите сервер, чтобы убедиться, что все изменения загружены
- запустите встроенную проверку системы django, чтобы выявить все проблемы:
python manage.py check
- иногда браузеры кэшируют старые ответы, поэтому очистка кэша или использование окна инкогнито может помочь .
- используйте url resolver от django для проверки правильности настройки шаблона url Добавьте этот код в одно из ваших представлений временно для отладки:
from django.urls import resolve
print(resolve('/home1/hello/'))
Надеюсь, это поможет вам.