Django-статический файл не найден
Я видел несколько сообщений для этой проблемы, но не нашел своего решения.
Я пытаюсь обслуживать статические файлы в моей среде разработки Django 1.3.
вот мои настройки
...
STATIC_ROOT = '/home/glide/Documents/django/cbox/static/'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
'/static/',
)
...
мой urls.py
urlpatterns = patterns('',
...
url(r'^static/(?P<path>.*)$', 'django.views.static.serve',
{'document_root', settings.STATIC_ROOT}
),
...
);
мой / главная / glide / документы / django/cbox / static/ как
css
main.css
javascript
image
Я получаю ошибку 404 при попытке доступа http://127.0.0.1:8000/static/css/main.в CSS.
должен ли я указывать шаблоны для css, javascript и изображений индивидуально ?
5 ответов
Я запутался STATIC_ROOT и STATICFILES_DIRS
на самом деле я не понимал полезности STATIC_ROOT. Я думал, что это каталог, в который я должен поместить свои общие файлы. Этот каталог используется для производства, это каталог, в который будут помещены (собраны) статические файлы collectstatic.
STATICFILES_DIRS Я необходимость.
поскольку я нахожусь в среде разработки, решение для меня не использовать STATIC_ROOT (или указать другой путь) и общей папке файлы STATICFILES_DIRS:
#STATIC_ROOT = (os.path.join(SITE_ROOT, 'static_files/'))
import os
SITE_ROOT = os.path.dirname(os.path.realpath(__file__))
STATICFILES_DIRS = (
os.path.join(SITE_ROOT, 'static/'),
)
Не забудьте from django.conf import settings
обслуживание статических файлов может быть достигнуто несколькими способами; вот мои заметки для себя:
- добавить до
my_app
(см. Примечание о пространстве имен ниже) - определите новый каталог верхнего уровня и добавьте его в STATICFILES_DIRS в settings.py (обратите внимание, что
The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting
)
Я предпочитаю первый способ и настройку, которая близка к пути определена в документации, так что для того, чтобы служить файл admin-custom.css
в переопределите пару стилей администратора, у меня есть такая настройка:
.
├── my_app/
│ ├── static/
│ │ └── my_app/
│ │ └── admin-custom.css
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── static/
├── templates/
│ └── admin/
│ └── base.html
└── manage.py
# settings.py
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
это затем используется в шаблоне так:
# /templates/admin/base.html
{% extends "admin/base.html" %}
{% load static %}
{% block extrahead %}
<link rel="stylesheet" href="{% static "my_app/admin-custom.css" %}">
{% endblock %}
во время разработки, если вы используете django.ВНО.staticfiles [ed: установлен по умолчанию], это будет сделано автоматически runserver, когда DEBUG имеет значение True [...]
при развертывании, я бегу collectstatic
и обслуживать статические файлы с nginx.
документы, которые прояснили всю путаницу для меня:
STATIC_ROOT
абсолютный путь к каталогу, где collectstatic будет собирать статические файлы для развертывания.
...он не место для постоянного хранения статических файлов. Вы должны сделать это в каталогах, которые будут найдены искателями staticfiles, которые по умолчанию являются "static/" app подкаталоги и любые каталоги, которые вы включаете в STATICFILES_DIRS).
https://docs.djangoproject.com/en/1.10/ref/settings/#static-root
статическое пространство имен файлов
теперь мы могли бы уйти, поместив наши статические файлы непосредственно в my_app/ static / (а не создавая другой подкаталог my_app), но это было бы плохой идеей. Django будет использовать первый статический файл, который он находит чье имя совпадает, и если бы у вас был статический файл с тем же именем в другом приложении, Django не смог бы отличить их. Мы должны иметь возможность указать Django на правильный, и самый простой способ обеспечить это-пространство имен. То есть, помещая эти статические файлы в другой каталог, названный для самого приложения.
STATICFILES_DIRS
ваш проект, вероятно, также имеют статические активы, которые не привязаны к конкретному приложению. В дополнение к использованию статического/ каталога внутри ваших приложений вы можете определить список каталогов (STATICFILES_DIRS) в файле настроек, где Django также будет искать статические файлы.
там может быть только две вещи в settings.py файл те делает ваши статические файлы служить.
1) STATIC_URL = ' / static/'
2) STATICFILES_DIRS = ( ОС.путь.join (BASE_DIR, " static"), )
и ваши статические файлы должны находиться в статическом каталоге, который находится в том же каталоге, что и файл настроек проекта.
даже тогда, если ваши статические файлы не загружаются, причина в том, что вы могли бы сохранить
DEBUG = Ложные
измените его на True (только для разработки). В производстве просто измените STATICFILES_DIRS на любой путь, где находятся статические файлы.
еще одна ошибка может не иметь вашего приложения, указанного в INSTALLED_APPS
о компании:
INSTALLED_APPS = [
# ...
'your_app',
]
не имея его, вы можете столкнуться с такими проблемами, как не обнаружение статических файлов, в основном все файлы, связанные с вашим приложением. Даже если это может быть правильно, как предложено в правильном ответе, используя:
STATICFILES_DIRS = (adding/path/of/your/app)
может быть одной из ошибок и должны быть рассмотрены, если получение этой ошибки.
{'document_root', settings.STATIC_ROOT}
должен быть
{'document_root': settings.STATIC_ROOT}
или вы получите ошибку, как
dictionary update sequence element #0 has length 6; 2 is required