Я видел несколько сообщений об этой проблеме, но не нашел своего решения.
Я пытаюсь обслуживать статические файлы в своей среде разработки 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}
),
...
);
Мой каталог / home / glide / Documents / django / cbox / static / похож на
css
main.css
javascript
image
Я получаю ошибку 404 при попытке доступа к http://127.0.0.1:8000/static/css/main.css .
Нужно ли указывать шаблоны для css, javascript и изображений отдельно?
источник
from django.conf import settings
, конечноBASE_DIR
встроенную const вместо,SITE_ROOT
и она работает.Может быть только две вещи в
settings.py
которые вызывают у вас проблемы.1)
STATIC_URL = '/static/'
2)
STATICFILES_DIRS = ( os.path.join(BASE_DIR, "static"), )
и ваши статические файлы должны находиться в статическом каталоге, который находится в том же каталоге, что и файл настроек проекта.
Даже если ваши статические файлы не загружаются, причина в том, что вы могли сохранить
DEBUG = False
измените его на True (только для разработки). При производстве просто измените
STATICFILES_DIRS
путь, по которому находятся статические файлы.источник
Обслуживать статические файлы можно несколькими способами; вот мои заметки к себе:
static/my_app/
каталог вmy_app
(см. примечание о пространстве имен ниже)The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting
)Я предпочитаю первый способ и настройку, которая близка к способу, определенному в документации , поэтому для того, чтобы обслужить файл
admin-custom.css
для переопределения нескольких стилей администратора, у меня есть такая настройка:# 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 %}
При развертывании я запускаю
collectstatic
и обслуживаю статические файлы с помощью nginx.Документы, которые прояснили для меня всю путаницу:
источник
Если ваш статический URL правильный, но все же:
Возможно, ваша проблема с WSGI.
➡ Config WSGI обслуживает как среду разработки, так и рабочую среду
==========================project/project/wsgi.py========================== import os from django.conf import settings from django.contrib.staticfiles.handlers import StaticFilesHandler from django.core.wsgi import get_wsgi_application os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings') if settings.DEBUG: application = StaticFilesHandler(get_wsgi_application()) else: application = get_wsgi_application()
источник
STATIC_ROOT
строчкуstatic
папку в другом каталоге. Предположим, каталог:project\static
Теперь обновите:STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'project/static/') ] STATIC_ROOT = os.path.join(BASE_DIR, 'static')
Что бы вы сделали главное,
STATICFILES_DIRS
иSTATIC_ROOT
не должен содержать тот же каталог.Я знаю, что прошло много времени, но надеюсь, что новые друзья получат от этого помощь
источник
Другая ошибка может заключаться в отсутствии вашего приложения в
INSTALLED_APPS
списке, например:INSTALLED_APPS = [ # ... 'your_app', ]
Без него вы можете столкнуться с такими проблемами, как не обнаружение ваших статических файлов, в основном всех файлов, связанных с вашим приложением. Хотя это может быть правильным, как предлагается в правильном ответе, используя:
STATICFILES_DIRS = (adding/path/of/your/app)
Может быть одной из ошибок, и при появлении этой ошибки следует ее проверить.
источник
Я решаю эту проблему, добавляя название своего проекта в INSTALLED_APPS.
источник
Я обнаружил, что переместил свой
DEBUG
параметр в свои локальные настройки, чтобы он был заменен значением по умолчаниюFalse
. По сути, убедитесь, что параметр DEBUG на самом деле неверен, если вы разрабатываете с помощьюDEBUG
иrunserver
.источник
В вашей команде типа cmd
python manage.py findstatic --verbosity 2 static
он укажет каталог, в котором Django ищет статические файлы. Если вы создали виртуальную среду, внутри этой папки virtual_environment_name будет статическая папка.VIRTUAL_ENVIRONMENT_NAME\Lib\site-packages\django\contrib\admin\static
. При запуске указанной выше команды findstatic, если Django показывает вам этот путь, просто вставьте все свои статические файлы в этот статический каталог. В вашем html файле используйте синтаксис JINJA для href и проверьте наличие других встроенных CSS. Если после синтаксиса JINJA все еще есть изображение src или url, добавьте его с помощью '/ static'. Это сработало для меня.источник
TEMPLATE_DIR=os.path.join(BASE_DIR,'templates') STATIC_DIR=os.path.join(BASE_DIR,'static') STATICFILES_DIRS=[STATIC_DIR]
источник
В вашем settings.py может быть следующее:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ["templates"],
'APP_DIRS': True,
'OPTIONS': {
# ... здесь некоторые параметры .. .
},
},]
ИЛИ ЖЕ
STATIC_URL = '/ статический /'
ИЛИ ЖЕ
STATICFILES_DIRS = (os.path.join (BASE_DIR, «статический»),)
источник
Если вы добавили
django-storages
модуль (например, для поддержки загрузки файлов в S3 в вашем приложении django), и если вы, как и я, не правильно прочитали документацию этого модуля , просто удалите эту строку из своегоsettings.py
:STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
В противном случае это приведет к тому, что ваши статические ресурсы будут просматриваться НЕ на вашем локальном компьютере, а удаленно в ведре S3, включая CSS панели администратора, и, таким образом, эффективно нарушить CSS панели администратора.
источник
STATICFILES_DIRS
используется в разработке иSTATIC_ROOT
в производстве ,STATICFILES_DIRS
иSTATIC_ROOT
не должны иметь одинаковое имя папки,Если вам нужно использовать одну и ту же статическую папку в разработке и производстве, попробуйте этот метод
включить это в
settings.py
import socket HOSTNAME = socket.gethostname() # if hostname same as production url name use STATIC_ROOT if HOSTNAME == 'www.example.com': STATIC_ROOT = os.path.join(BASE_DIR, "static/") else: STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static/'), ]
источник
{'document_root', settings.STATIC_ROOT}
должно быть{'document_root': settings.STATIC_ROOT}
или вы получите сообщение об ошибке
dictionary update sequence element #0 has length 6; 2 is required
источник