Django не обслуживает статические файлы, получая 404 ошибки
Мне не кажется, что мои статические файлы загружаются из моих шаблонов. Я следил за официальной документацией, но мне что-то не хватает.
Мой макет каталога (сгенерированный Django, большинство файлов опущено):
myproject
myproject
settings.py
urls.py
static
css
bootstrap.css
main.css
templates
base.html
myapp1
myapp2
...
manage.py
Мой settings.py
:
STATIC_URL = 'static/'
Я ссылаюсь на мои таблицы стилей, как это (из моих шаблонов):
{% load staticfiles %}
<link rel="stylesheet" href="{% static "css/bootstrap.css" %}" type="text/css">
<link rel="stylesheet" href="{% static "css/style.css" %}" type="text/css">
Который дает это однажды отображаемое (в HTML):
<link rel="stylesheet" href="static/css/bootstrap.css" type="text/css">
<link rel="stylesheet" href="static/css/style.css" type="text/css">
Но эти ссылки на самом деле ничего не ведут (когда я нахожу их, я получаю ошибку 404 от Django). Я чувствую, что могу исправить это, добавив что-то в urls.py
, но я думал, что Django сделал это автоматически при запуске сервера? Что мне не хватает?
Ответы
Ответ 1
Вы определили каталог статических файлов в settings.py
?
Я предполагаю, что у вас есть 'django.contrib.staticfiles',
в ваших установленных приложениях.
Если вы не определили свой статический файл dir, вы могли бы сделать что-то вроде этого:
import os.path
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
STATICFILES_DIRS = (
os.path.join(PROJECT_ROOT, 'static'),
)
Ответ 2
Это рабочее решение для доступа к static/media/template в django для окон,
settings.py
import os.path
STATIC_ROOT = ''
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join('static'),
)
Ответ 3
Моя проблема была решена путем добавления "STATICFILES_DIRS" в файл settings.py
STATIC_URL = '/static/'
STATICFILES_DIRS = ( os.path.join('static'), )
Ответ 4
Я думал, что Django сделал это автоматически при запуске сервера?
Почему вы так думаете? Если вы следовали официальной документации, вы не нашли бы этого. Прочитайте, что вам нужно сделать, чтобы служить им в разработке здесь.
Есть и другая проблема. Ваш STATIC_URL
является относительной ссылкой, поэтому браузеры добавляют его к существующему URL-адресу страницы. Поэтому, если вы находитесь на странице /foo
, 'static/css/style.css'
оценивается как /foo/static/css/style.css'
.
Убедитесь, что он начинается с /
- т.е. /static/
- или является полным URL-адресом, то есть http://myserver.com/static/
.
Ответ 5
Проверьте, существует ли STATICFILES_FINDERS
в settings.py
https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#std:setting-STATICFILES_FINDERS
Значение по умолчанию STATICFILES_FINDERS
достаточно хорошее, но у вас есть 2 варианта:
-
вам нужно иметь статический файл внутри приложения и иметь это приложение в INSTALLED_APPS
-
или вам нужно определить STATICFILES_DIRS
своим путем к статическим файлам, если ожидать, что поведение будет django.contrib.staticfiles.finders.FileSystemFinder
Ответ 6
Я тоже столкнулся с этой проблемой. И я решил проблему, пересмотрев href следующим образом:
<html>
<link rel="stylesheet" href="{{STATIC_URL}}css/bootstrap.css" type="text/css">
<link rel="stylesheet" href="{{STATIC_URL}}css/style.css" type="text/css">
</html>
Ответ 7
Убедитесь, что статическая папка настроена в нужном месте, то есть, если она находится в папке приложения, вы можете получить дополнительные разъяснения из этого полезного ресурса 1.
Ответ 8
Мое решение было DEBUG = True
в настройках.