Django не обслуживает статические файлы

Я использую Django==1.5.5 и мое приложение Django структурировано как

--project/
----project/
------settings.py
------urls.py
----app1/
------models.py
------views.py
----staticfiles/
------style.css
----static/
------admin/
--------js/
--------css/
------style.css
----templates/
------header.html
------post.html
------footer.html
----manage.py

/project/settings.py является

import os    
DEBUG = False
TEMPLATE_DEBUG = DEBUG    
PROJECT_ROOT = os.path.join(os.path.dirname(__file__), '..')    
ALLOWED_HOSTS = ['localhost', '127.0.0.1']    
MEDIA_ROOT = ''    
MEDIA_URL = ''    
SITE_ROOT = PROJECT_ROOT    
STATIC_ROOT = os.path.join(SITE_ROOT, 'static')    
STATIC_URL = '/static/'    
STATICFILES_DIRS = (
    os.path.join(SITE_ROOT, 'staticfiles'),
)    
TEMPLATE_DIRS = (
    os.path.join(SITE_ROOT, 'templates'),
)

в header.html я пытаюсь использовать это как:

    <head>
        <title>My Site</title>
        {% load static from staticfiles %}
        <link rel="stylesheet" href="{% static 'style.css' %}">
    </head>

Но это не загрузка mysite.com/static/style.css и дает ошибку 404

Я побежал python manage.py collectstatic собрать весь статический файл.

Почему его загрузка файла CSS? какая-либо конфигурация отсутствует?

Пожалуйста, предложите.

4 ответа

Решение

Согласно документации, правильный способ загрузить статический файл

{% load staticfiles %}
<img src="{% static "my_app/myexample.jpg" %}" alt="My image"/>

У меня была та же проблема, и ни один из найденных ответов не сработал. Оказывается, есть несколько частей, которые должны быть правильно настроены для работы статических файлов. Примечание: я использую django 1.6, и это решение предназначено для разработки, а не для развертывания.

Настройка статических файловых папок

django-admin.py startproject $site_name
mkdir $site_name/static
mkdir $site_name/static/css
mkdir $site_name/static/javascript
mkdir $site_name/static/images

ваша папка должна выглядеть так

$site_name/
    manage.py
    $site_name/
        __init__.py
        settings.py
        urls.py
        wsgi.py
    static/
        css/
        javascript
        images/

отредактируйте файл $site_name/$site_name/setting.py и добавьте

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATICFILES_DIRS =( os.path.join(STATIC_ROOT, 'css/'),
                    os.path.join(STATIC_ROOT, 'javascript/'),
                    os.path.join(STATIC_ROOT, 'images/')
                  )

отредактируйте $site_name/$site_name/urls.py и добавьте

from django.conf import settings
from django.conf.urls.static import static

urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

используя статические URL

{% load staticfiles %}
<a href="{% static "banner.png" %}">

Только для развития. Установите DEBUG = True в файле settings.py и добавьте 'django.contrib.staticfiles' в INSTALLED_APPS. Затем добавьте эти строки кода в файл settings.py вашего проекта:

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

Django НИКОГДА не будет обслуживать файлы из каталога STATIC_ROOT. Вся цель STATIC_ROOT — хранить все в папке, которая используется на производственном уровне. Я потратил 5 часов на изучение этого, и я, наконец, понял. Я собираюсь просмотреть все для режима разработки.

Люди будут пытаться сказать вам, что вам нужно добавить все это в ваш urls.py, когда все, что вам действительно нужно сделать, это добавить следующее.

  1. Добавьте это в список INSTALLED_APPS в settings.py.

Теперь, какого черта вообще используется python manage.py collectstatic?

Это используется для сбора всех файлов, найденных в папке с именем static в любом из ваших приложений, а также файлов в STATICFILES_DIRS, и помещает их в каталог STATIC_ROOT. Теперь, когда все ваши статические файлы удобно размещены в одной папке, вы можете использовать что-то вроде apache, чтобы более эффективно обслуживать их во время производства.

БУМ!

Если вы мне не верите, поймите меня, или я что-то пропустил, внимательно прочитайте это и попробуйте https://docs.djangoproject.com/en/4.0/howto/static-files/

Последнее замечание. Django удобно размещает ссылки с комментариями на то, что вам нужно сделать для каждой части приложения, в коде, который он генерирует для вас.

Другие вопросы по тегам