Проблема рендеринга шаблонов Django
Я новичок в Django, пытаюсь создать веб-приложение на основе самоучителя. Я создал приложение с именем "travello" и именем проекта "travellproject", в представлениях я пытаюсь отобразить html-страницу.
from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def homepage(request):
return render(request,'homepage.html')
я создал каталог "templates" в travellproj (пожалуйста, ознакомьтесь со структурой каталога ниже), также определил DIRS переменной шаблона как указано ниже и urls.py как указано ниже.
"DIRS": [os.path.join(BASE_DIR,'templates')],
urlpatterns = [
path("",views.homepage),
path("admin/", admin.site.urls),
]
Но я получаю ошибку TemplateDoesNotExist, пожалуйста, помогите.
Ошибка
TemplateDoesNotExist в / /
homepage.html
Метод запроса: GET
URL запроса: http://127.0.0.1:8000/
Версия Django: 4.1.5
Тип исключения: TemplateDoesNotExist
Значение исключения:
homepage.html
Exception Location: C:\Users\Django\first_proj\lib\site-packages\django\template\loader.py, строка 19, in get_template
Поднято во время: travello.views.homepage
Структура каталога:
travello
|-views.py
travellProj
|-templates -- > homepage.html
|-urls.py
|-setting.py
Папка templates должна находиться в корне вашего сайта. Давайте посмотрим, как это должно выглядеть:
Project_folder
|-travelproj <-- Your site configuration folder
|-|-urls.py
|-|-wsgi.py
|-|-asgi.py
|-|-.......
|-travello <-- this is an application
|-|-views.py
|-|-urls.py
|-|-templates <-- templates for this app only
|-|-|-travello
|-|-|-|-template1.html
|-|-|-|-.......
|-|-.......
|-templates <- This is the templates folder for your site
|-|-homepage.html
|-|-..........
|-manage.py
|-requirements.txt
Итак, в вашем случае папка templates находится в папке конфигурации сайта, что не является хорошей практикой. Вы должны переместить ее на ступень выше.
Советы по хорошей практике: В корне вашего сайта (на том же уровне, что и manage.py) у вас есть папка templates, которая будет содержать шаблоны, общие для всех ваших приложений. В каждом приложении у вас есть папка templates/app_name, которая содержит все шаблоны, специфичные для этого приложения.
У вас такая же архитектура для статики.
Внутри шаблонов создайте еще один новый каталог с именем вашего приложения travello
, затем сохраните html-файл внутри каталога travello
travello
| templates/travello/homepage.html
|-views.py
travellProj
|-urls.py
|-setting.py
Тогда views
должно быть похоже на
def homepage(request):
return render(request,'travello/homepage.html')