Django не может найти статические файлы. Нужна вторая пара глаз, я схожу с ума

Django не будет обслуживать мои статические файлы. Здесь возвращается ошибка:

[13/Jun/2014 06:12:09] "GET /refund/ HTTP/1.1" 200 2927
[13/Jun/2014 06:12:09] "GET /static/css/bootstrap.min.css HTTP/1.1" 404 1667
[13/Jun/2014 06:12:09] "GET /static/css/cover.css HTTP/1.1" 404 1643
[13/Jun/2014 06:12:09] "GET /static/js/bootstrap.min.js HTTP/1.1" 404 1661
[13/Jun/2014 06:12:09] "GET /static/assets/js/docs.min.js HTTP/1.1" 404 1667  
[13/Jun/2014 06:12:09] "GET /static/js/bootstrap.min.js HTTP/1.1" 404 1661
[13/Jun/2014 06:12:09] "GET /static/assets/js/docs.min.js HTTP/1.1" 404 1667

Здесь соответствующая часть моего base.html для начальной загрузки:

!DOCTYPE html>
<html lang="en">
{% load static %}
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<link rel="shortcut icon" href="../../assets/ico/favicon.ico">

<title>Cover Template for Bootstrap</title>

<!-- Bootstrap core CSS -->
{
<link href="{% static "css/bootstrap.min.css"%}" rel="stylesheet">

<!-- Custom styles for this template -->
<link href="{% static "css/cover.css" %}" rel="stylesheet">

Соответствующий код из settings.py (Примечание. Шаблоны работали нормально.)

TEMPLATE_DIRS = (
    os.path.join(BASE_DIR, 'templates'),
)

STATIC_URL = '/static/'

STATIC_ROOT = ''

И вот, как выкладывается мой проект django:

  • админ
  • db.sqlite3
  • название проекта
  • manage.py
  • имя приложения
  • Статическая
    • CSS
      • ...
    • расстояние
      • ...
  • шаблон
    • base.html

Любая помощь вообще будет оценена по достоинству. Я не знаю, что я, возможно, сделал неправильно, я просмотрел код миллион раз и, очевидно, это должен быть пробел в моем понимании того, как Django обслуживает статические файлы; однако я сделал это ранее без каких-либо проблем.

Ответ 1

выполните следующие действия:

  • Если вы находитесь в DEBUG, установите для параметра settings.py значение STATICFILES_DIRS = ( "путь/в/статический" ). Затем он должен работать только в режиме DEBUG.

  • Если вы хотите, чтобы он также работал в режиме развертывания, установите параметр STATIC_ROOT = ( "путь/в/статический_root" ) в settings.py. Затем выполните python manage.py collectstatic, и он также должен работать.

И теперь, для лучшего понимания того, как django управляет статическими файлами:

  • В Django есть определенные предопределенные места для поиска статических файлов и их сбора, вы указываете, где их найти с помощью STATICFILES_FINDERS в вашем файле settings.py. По умолчанию он ищет статические папки внутри ваших приложений. Вы можете указать Django искать статические файлы в других частях, установив переменную STATICFILES_DIRS (список или кортеж путей).

  • В режиме DEBUG из этих путей выбираются статические файлы (не из static_root, где вы собираете файлы).

  • Когда вы выполняете python manage.py collectstatic, Django просматривает все каталоги, в которых могут быть найдены статические файлы, и помещает их в ваш статический корень. При запуске в режиме развертывания из этого каталога можно загружать статические файлы.

PS: Обычно я создаю приложение, называемое общим, и создаю статический каталог внутри, чтобы разместить все общие css, js для моего проекта (а также для шаблонов). Таким образом, мне не нужно указывать переменную STATICFILES_DIRS.

Надеюсь, что теперь ясно =).

Ответ 2

Ну, просто пройдя учебник, я сильно застрял в этой проблеме. Исправлено просто перезапуск веб-сервиса. Итак, если просто завершить инструкции Tutorial, поместите в каталог dir каталог static//style.css, помещая

{% load staticfiles %}
<link rel="stylesheet" type="text/css" href="{% static '<your_app_name>/style.css' %}" />

внутри head-section html файлов (например, index.html), которые должны быть сконструированы с этим css файлом.

Ответ 3

Измените STATIC_ROOT на settings.py, я надеюсь, что это сработает. Я сталкиваюсь с той же проблемой....

TEMPLATE_DIRS = (
    os.path.join(BASE_DIR, 'templates'),
)
STATICFILES_DIRS = (
     os.path.join(BASE_DIR, 'static'),
)
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static')

STATIC_URL = '/static/'