Подтвердить что ты не робот

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 сделал это автоматически при запуске сервера? Что мне не хватает?

4b9b3361

Ответ 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 в настройках.