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
- имя приложения
- Статическая
- шаблон
Любая помощь вообще будет оценена по достоинству. Я не знаю, что я, возможно, сделал неправильно, я просмотрел код миллион раз и, очевидно, это должен быть пробел в моем понимании того, как 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/'