Django - не удается загрузить статические файлы CSS
Я запускаю сервер разработки Django (runserver
) на своей локальной машине (Mac OS X) и не могу загрузить файлы CSS.
Вот соответствующие записи в settings.py:
STATIC_ROOT = '/Users/username/Projects/mysite/static/'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
'/Users/thaymore/Projects/mysite/cal/static',
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#'django.contrib.staticfiles.finders.DefaultStorageFinder',
)
INSTALLED_APPS = (
# other apps ...
'django.contrib.staticfiles',
)
В моем view.py я запрашиваю контекст:
return render_to_response("cal/main.html",dict(entries=entries),context_instance=RequestContext(request))
И в моем шаблоне {{ STATIC_URL }}
отображается правильно:
<link type="text/css" href="{{ STATIC_URL }}css/main.css" />
Входит в:
<link type="text/css" href="/static/css/main.css"/>
Здесь находится файл. Я также запускал collectstatic
, чтобы убедиться, что все файлы собраны.
У меня также есть следующие строки в моем urls.py:
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()
Я новичок в Django, так что, наверное, пропустил что-то простое - буду признателен за любую помощь.
Ответы
Ответ 1
Прочтите это внимательно: https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/
Есть ли django.contrib.staticfiles
в вашем INSTALLED_APPS
в settings.py
?
DEBUG=False
? Если это так, вам нужно вызвать runserver
с параметром --insecure
:
python manage.py runserver --insecure
collectstatic
не имеет отношения к обслуживанию файлов через сервер разработки. Это для сбора статических файлов в одном месте STATIC_ROOT
для вашего веб-сервера, чтобы найти их. Фактически, запуск collectstatic
с вашим STATIC_ROOT
задан путь в STATICFILES_DIRS
является плохой идеей. Вы должны перепроверить, чтобы убедиться, что ваши CSS файлы уже существуют.
Ответ 2
С Django 1.11.x + вам нужно настроить статические файлы в settings.py
как,
STATIC_URL = '/static/' # the path in url
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
и использовать его со статическим тегом шаблона,
{% load static %}
<link rel="stylesheet" href="{% static 'css/bootstrap.css' %}">
Ответ 3
Еще одна простая задача - остановить, а затем перезапустить сервер, например.
$ python manage.py runserver
Я просмотрел другие ответы, но перезагрузка сервера работала для меня.
Ответ 4
Добавьте следующий код в settings.py
:
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
После этого создайте статическую папку в корневой директории вашего проекта.
Для загрузки статических файлов на шаблоны используйте:
{% load static %}
<img src="{% static "images/index.jpeg" %}" alt="My image"/>
Ответ 5
Пропущены ли они из settings.py
? Я вставляю одну из моих настроек проекта:
TEMPLATE_CONTEXT_PROCESSORS = ("django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
"django.contrib.messages.context_processors.messages")
Кроме того, это то, что у меня есть в urls.py
:
urlpatterns += patterns('', (
r'^static/(?P<path>.*)$',
'django.views.static.serve',
{'document_root': 'static'}
))
Ответ 6
DEBUG = True
в моих локальных настройках сделал это для меня.
Ответ 7
добавлен
PROJECT_ROOT = os.path.normpath(os.path.dirname(__file__))
STATICFILES_DIRS = ( os.path.join(PROJECT_ROOT, "static"), )
и удалил STATIC_ROOT
из settings.py
, он работал у меня
Ответ 8
Эти шаги работают для меня, просто см. Загрузка статических файлов (CSS, JS и изображений) в Django
Я использую Django 1.10.
- создайте папку
static
на том же уровне settings.py
, мой путь settings.py
равен ~/djcode/mysite/mysite/settings.py
, поэтому этот каталог ~/djcode/mysite/mysite/static/
;
- создайте две папки
static_dirs
и static_root
в static
, которые ~/djcode/mysite/mysite/static/static_dirs/
и ~/djcode/mysite/mysite/static/static_root/
;
-
напишите settings.py
следующим образом:
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.10/howto/static-files/
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'mysite', 'static', 'static_root')
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'mysite', 'static', 'static_dirs'),
)
-
выполните эту команду $ python manage.py collectstatic
в оболочке;
-
создайте папку css
в static_dirs
и поместите в свой собственный .css
файл, путь к вашему css файлу - ~/djcode/mysite/mysite/static/static_dirs/css/my_style.css
;
-
изменить тег <link>
в .html
файле: <link rel="stylesheet" type="text/css" href="{% static 'css/my_style.css' %}">
,
Наконец, этот путь ссылки http://192.168.1.100:8023/static/css/my_style.css
Бинго!
Ответ 9
Добавьте этот "django.core.context_processors.static",
контекстный процессор в свои settings.py
TEMPLATE_CONTEXT_PROCESSORS = (
"django.core.context_processors.static",
)
Ответ 10
У вас был такой же путь в STATICFILES_DIRS AND STATIC_ROOT, я столкнулся с той же проблемой, и ниже было исключение -
Неправильно сконфигурировано: параметр STATICFILES_DIRS не должен содержать параметр STATIC_ROOT
Для локального вам не нужен STATICFILES_DIRS, так как в любом случае вам не нужно запускать collectstatic. После того, как вы прокомментируете это, он должен работать нормально.
Ответ 11
Вы добавили в свои шаблоны:
{% load staticfiles %}
Это загружает то, что нужно, но по какой-то причине я испытал, что иногда работает без этого...???
Ответ 12
Посмотрите, включено ли ваше основное приложение (где находится статический каталог) в INSTALLED_APPS.
Поиск файлов осуществляется с помощью разрешенных искателей. Значение по умолчанию - это поиск во всех местоположениях, определенных в STATICFILES_DIRS, и в "статическом" каталоге приложений, заданных параметром INSTALLED_APPS.
Ответ 13
Вы можете просто установить STATIC_ROOT в зависимости от того, работаете ли вы на локальном хосте или на вашем сервере. Чтобы определить это, обратитесь к этому сообщению.
И вы можете переписать вашу конфигурацию STATIC_ROOT как:
import sys
if 'runserver' in sys.argv:
STATIC_ROOT = ''
else:
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
Ответ 14
Если вы установили DEBUG = FALSE, вам нужно выполнить следующие шаги
В вашем файле urls.py: добавьте эту строку
from django.views.static import serve
url(r'^media/(?P<path>.*)$', serve,{'document_root': settings.MEDIA_ROOT}),
url(r'^static/(?P<path>.*)$', serve,{'document_root': settings.STATIC_ROOT}),
Ответ 15
Я попробовал эту модель, и она сработала.
Изменение настроек в соответствии с проектом django, созданным с помощью оболочки
"django-admin.py startproject xxx"# here xxx is my app name
изменить папку, как показано ниже, загрузить наши статические файлы для запуска на сервере
Структура xxx:
> .
> |-- manage.py
> |-- templates
> | `-- home.html
> `-- test_project
> |-- __init__.py
> |-- settings.py
> |-- static
> | |-- images
> | | `-- 01.jpg
> | |-- style.css
> |-- urls.py
> `-- wsgi.py
- изменения в Settings.py
import os
INSTALLED_APPS = ( 'xxx',# my app is to be load into it)
STATIC_ROOT = ''
STATIC_URL = '/static/'
PROJECT_DIR = os.path.dirname(__file__)
TEMPLATE_DIRS = ( os.path.join(PROJECT_DIR, '../templates'),)#include this
- изменения в urls.py
from django.conf.urls import patterns, include, url
from django.views.generic import TemplateView
class DirectTemplateView(TemplateView):
extra_context = None
def get_context_data(self, **kwargs):
context = super(self.__class__, self).get_context_data(**kwargs)
if self.extra_context is not None:
for key, value in self.extra_context.items():
if callable(value):
context[key] = value()
else:
context[key] = value
return context
urlpatterns = patterns('',
url(r'^$', DirectTemplateView.as_view(template_name="home.html")), )
- home.html
<html>
<head>
<link href="{{STATIC_URL}}style.css" rel="stylesheet" type="text/css">
</head>
<body>
<h1>This is home for some_app</h1>
<img src="{{STATIC_URL}}/images/01.jpg" width=150px;height=150px; alt="Smiley ">
</body>
</html>
Ответ 16
Мне пришлось использовать
STATICFILES_DIRS = ( '/home/USERNAME/webapps/django/PROJECT/static/', )
Это помогло мне.