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 [...]

https://docs.djangoproject.com/en/1.10/howto/static-files/

при развертывании, я бегу 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 на правильный, и самый простой способ обеспечить это-пространство имен. То есть, помещая эти статические файлы в другой каталог, названный для самого приложения.

https://docs.djangoproject.com/en/1.10/howto/static-files/


STATICFILES_DIRS

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

https://docs.djangoproject.com/en/1.10/howto/static-files/


там может быть только две вещи в 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