Почему Django не загружает мой CSS-файл вместе с HTML?
Я новичок в создании приложений Django и пытаюсь добавить простой CSS-файл в простой HTML-файл для указания стиля. Мне не удается добиться того, чтобы CSS-файл читался в HTML-документе на моем веб-сервере. Не могли бы вы помочь мне с этой проблемой?
Мой каталог выглядит примерно так:
web3/
├── home1/
│ ├── static/
│ │ └── home1/
│ │ └── style.css
где home1 - это приложение, а мой шаблон HTML находится в первой папке home1 (т.е. home1/template/home1/home.html)
Вот что у меня есть в моем html-документе:
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Kirby is the greatest</title>
<!-- Link the CSS file -->
{% load static %}
<link rel="stylesheet" href="{% static 'home1/style.css'%}">
</head>
<body>
<h1>Great Job</h1>
<h2>Proud</h2>
</body>
my views.py:
`# home1/views.py
from django.shortcuts import render
from django.http import HttpResponse
from django.template import loader
def hello_world(request):
return HttpResponse("you did it")
def home(request):
return render(request,"home1/home.html")'
и статическая часть моего файла settings.py:
`# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/5.0/howto/static-files/
STATIC_URL = '/static/'
STATICFILES_DIRS = [
BASE_DIR / "home1/static",
]
# Define the directory where 'collectstatic' will place all static files for production
STATIC_ROOT = BASE_DIR / 'staticfiles'
# Default primary key field type
# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
`
Первое, что нужно сделать, - это понять, в какой момент происходит сбой. Вероятно, чаще всего статические файлы не добавляются в urlpatterns вашего проекта. Вы можете сделать это в {settings_dir}/urls.py
и добавить следующее:
from django.conf import settings
from django.conf.urls.static import static
from django.urls import include, path
urlpatterns = [
# ... your URLconf goes here ...
]
if settings.DEBUG:
urlpatterns += [
static(settings.STATIC_URL, document_root=settings.STATIC_ROOT), # Static files (that you create on development)
static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) # Media files (that are uploaded by users)
]
Обратите внимание, что они находятся в состоянии if settings.DEBUG
. Обычно при развертывании на сервере он располагается за NGINX или Apache, которые могут перенаправлять запросы "статических файлов" и обслуживать их более эффективно, не загружая основной сервер.