Django не загружает CSS (статические файлы)
Я новичок в Django, пытаюсь применить CSS-файл (хранящийся в base/static/css) к базовой странице веб-приложения. По какой-то причине файл не применяется к странице, и я получаю вывод "GET /social/ HTTP/1.1" 200 29461, когда я обновляю страницу. Я пытался применить другие ответы на ту же проблему, например убедиться, что django.contrib.staticfiles
и моя базовая папка socialnetwork
находятся в INSTALLED_APPS
, использовать STATICFILES_DIRS
вместо STATIC_ROOT
(в сочетании с использованием python manage.py collectstatic
в терминале) или указать их в разные папки, а также поместить
urlpatterns += static(settings.STATIC_URL,document_root=settings.STATIC_ROOT)
в моем файле urls.py, который сработал один раз, а затем сразу же вернулся к той же ошибке (я также попробовал использовать staticfiles_urlpatterns()
вместо этого). Просмотрев документацию, я попробовал отключить и очистить недавний кэш с помощью Developer Tools в браузере, а также вручную перезапустить сервер с помощью Ctrl+C и python manage.py runserver
, и оба способа, похоже, не дали эффекта (хотя после удаления кэша я получил 404 ошибку для некоторых медиафайлов, которая быстро исчезла).
Ранее у меня была похожая проблема с загрузкой медиафайлов, но она была легко исправлена с помощью
urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
, который, похоже, не работает здесь для статических файлов.
В моем проекте используется runserver, который, судя по другим ответам, не самый лучший, хотя я использую этот проект только локально на своем ПК. Мои файлы выглядят следующим образом:
socialnetwork/landing/templates/base.html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://kit.fontawesome.com/a3159a882f.js" crossorigin="anonymous"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
{% load static %}
<link href="{% static 'css/style.css' %}" type="text/css" rel="stylesheet">
<title>Social Network</title>
</head>
<body>
{% include 'landing/navbar.html' %}
{% block content %}
{% endblock content %}
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
</body>
</html>
socialnetwork/socialnetwork/urls.py
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('landing.urls')),
path('accounts/', include('allauth.urls')),
path('social/', include('social.urls')),
]
if settings.DEBUG:
urlpatterns += static(settings.STATIC_URL,document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Затем в файле socialnetwork/socialnetwork/settings.py у меня есть
INSTALLED_APPS = [
'socialnetwork',
'social',
'static',
'landing',
'allauth',
'crispy_forms',
'crispy_bootstrap5',
'allauth.account',
'allauth.socialaccount',
'django.contrib.admin',
'django.contrib.auth',
"django.contrib.sites",
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
и
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
с DEBUG = True
.
Для страницы, которую я рендерю (post_list.html), связанные представления в socialnetwork/social/views.py возвращают render(request, 'social/post_list.html', context)
. Наконец, структура моих файлов выглядит примерно так
social network
> landing
-> templates
-> base.html
> media
> social
-> templates
-> post_list.html
-> models.py
-> urls.py
-> views.py
> socialnetwork
-> settings.py
-> urls.py
> static
-> admin
-> css
-> style.css
> templates
> manage.py
Спасибо, что прочитали, я постарался включить все, что считаю нужным. Есть ли решение или что-то, что я упустил из виду?
вставьте STATIC_ROOT
настройки в файл settings.py.
Как показано ниже. Собрать
STATIC_ROOT = 'your collect static folder path relative to project folder'
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]