Django: статический контент не найден

Я ломаю голову над этим на целый день, но не могу понять проблему. Это произошло после того, как я скопировал свой проект с одной машины на другую.

Settings.py

STATIC_URL = '/static/'
STATIC_ROOT = 'staticfiles'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)

Упоминается "django.contrib.staticfiles" в INSTALLED_APPS.

Структура папки:

Django-Projects (root)
    project
    app
    static
        css
          home.css
        js
    manage.py

Шаблон:

{% load staticfiles %}

<link rel="stylesheet" href="{% static 'css/home.css' %}">

urls.py

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    url(r'', include('app.urls')),
)

Он выдает сообщение об ошибке в консоли при открытии шаблона:

 GET http://127.0.0.1:8000/static/css/home.css 
Failed to load resource: the server responded with a status of 404 (NOT FOUND)

Что здесь может быть неправильным? Пожалуйста, помогите мне. Большое спасибо!

Ответ 1

В вашем settings.py

BASE_DIR = os.path.dirname(os.path.dirname(__file__))

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)
STATIC_URL = '/static/'

Затем в файле шаблона:

<link rel="stylesheet" href="{{ STATIC_URL }}css/home.css">

С корневой структурой каталогов, которую вы показали, я думаю, что приведенная выше настройка должна работать. Однако не проверял. Дайте мне знать, если это сработает.

Ответ 2

установите DEBUG=True и посмотрите, работает ли это. Это означает, что django будет обслуживать ваши статические файлы, а не httpserver, который в этом случае не существует с момента запуска приложения локально.

Ответ 3

Я исследовал эту проблему на целый день. Это будет хорошо:

DEBUG = True
ALLOWED_HOSTS = []

Ответ 4

Django default BASE_DIR будет искать для вас статический контент. Но в вашем случае вы изменили путь до первоначального проекта. Так что для этого в вашем случае вам нужно изменить свой BASE_DIR следующим образом: тогда только статический файл будет корректно работать

BASE_DIR = os.path.dirname(os.path.abspath(__file__) + '../../../')

Обновлено:

Я не видел этого комментария.! DEBUG = True только для разработки, и вы устанавливаете как False, поэтому django использует STATIC_ROOT = 'staticfiles' для обслуживания статического содержимого в рабочей среде... Спасибо

Ответ 5

Вам не нужно ссылаться на STATIC_ROOT = 'staticfiles'

Просто как:

STATIC_URL = '/static/'

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

Ответ 6

У меня была такая же проблема в Джанго. Я добавил в свои настройки: STATIC_ROOT = 'static/'

Это была единственная проблема.