Django - Не удается загрузить статические CSS-файлы - PullRequest
48 голосов
/ 27 сентября 2011

Я использую сервер разработки 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',
)

В моем views.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, поэтому, возможно, мне не хватает чего-то простого - буду признателен за любую помощь.

Ответы [ 16 ]

69 голосов
/ 27 сентября 2011

Внимательно прочитайте это: 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-файлы уже существуют.

20 голосов
/ 28 августа 2017

С 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' %}">
5 голосов
/ 14 июня 2016

Еще одна простая вещь, которую нужно попробовать - это остановить, а затем перезапустить сервер, например,

$ python manage.py runserver

Я посмотрел другие ответы, но перезапуск сервера мне помог.

4 голосов
/ 25 сентября 2017

Добавьте следующий код в settings.py:

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
]

После этого создайте статическую папку в корневом каталоге вашего проекта.

Чтобы загрузить статические файлы в шаблоныиспользование:

{% load static %}
  <img src="{% static "images/index.jpeg" %}" alt="My image"/>
3 голосов
/ 28 сентября 2011

Они отсутствуют в вашем 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'}
))
2 голосов
/ 06 сентября 2016

Эти шаги работают для меня, просто посмотрите Загрузка статических файлов (CSS, JS и изображений) в Django

Я использую Django 1.10.

  1. создайте папку static на том же уровне settings.py, мой путь settings.py равен ~/djcode/mysite/mysite/settings.py, поэтому этот каталог ~/djcode/mysite/mysite/static/;
  2. создать две папки static_dirs и static_root в static, то есть ~/djcode/mysite/mysite/static/static_dirs/ и ~/djcode/mysite/mysite/static/static_root/;
  3. напишите 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'),
    )
    
  4. выполните эту команду $ python manage.py collectstatic в оболочке;

  5. создайте папку css в static_dirs и поместите в свой собственный файл .css, путь к вашему css-файлу будет ~/djcode/mysite/mysite/static/static_dirs/css/my_style.css;

  6. изменить <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

Бинго!

2 голосов
/ 19 августа 2015

1001 * добавил *

PROJECT_ROOT = os.path.normpath(os.path.dirname(__file__))
STATICFILES_DIRS = ( os.path.join(PROJECT_ROOT, "static"), )

и убрал STATIC_ROOT с settings.py, у меня сработало

2 голосов
/ 31 марта 2014

DEBUG = True в моих локальных настройках сделал это для меня.

1 голос
/ 04 апреля 2017

Добавьте этот "django.core.context_processors.static", контекстный процессор в ваши settings.py

TEMPLATE_CONTEXT_PROCESSORS = (
"django.core.context_processors.static",

)

0 голосов
/ 10 июля 2019

Если вы установите 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}),

...