Как я могу заставить статические файлы работать в моем проекте Django? - PullRequest
0 голосов
/ 31 декабря 2018

Использование: Python 3.7 и Django 2.1.4

Я работаю над учебными пособиями в книге Django для начинающих Уильяма С. Винсента.Я нахожусь в части "Приложения к блогу" книги, и я следовал его инструкциям к письму.Однако я не могу заставить сервер dev обслуживать мой статический файл CSS, независимо от того, что я делаю.

Мой исходный код можно найти здесь.

IЯ использую manage.py runserver для запуска демонстрационного сервера разработки для локального тестирования.

Вот мое дерево каталогов:

./
├── blog
│   ├── admin.py
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations
│   │   ├── 0001_initial.py
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── blog_project
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── db.sqlite3
├── manage.py
├── Pipfile
├── Pipfile.lock
├── static
│   └── css
│       └── base.css
└── templates
    ├── base.html
    └── home.html

Первоначально я обновил blog_project/settings.py этой строкой:

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

и я помещаю {% load static %} в начало моего templates/base.html файла, а также добавляю <link href="{% static 'css/base.css' %}" rel="stylesheet"> в раздел <head> ... </head>.

После записи файла static/css/base.css,это должно было сработать.Но это не так.Я исследовал форумы и переполнение стека и увидел людей, которые советуют добавлять статические каталоги в файл blog_project/settings.py, поэтому я обновил этот файл, добавив следующее:

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.1/howto/static-files/

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATICTILES_DIRS = [
    STATIC_ROOT,
]

Затем я обновил blog_project/urls.py файла, добавив два новых импорта:

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

и следующую строку:

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

Но даже это не сработало.

Вы можете проверить мой settings.py , urls.py и base.html , чтобы увидеть, о чем я говорю.

Я ожидал manage.py runserver для размещения статических файлов, но это не так.Когда я попытался загрузить файл CSS напрямую, я получил ошибку 404.

1 Ответ

0 голосов
/ 31 декабря 2018

Во-первых, вы неправильно написали STATICFILES_DIRS в связанном файле settings.py с безудержной буквой T вместо F: STATICTILES_DIRS.

Во-вторых, не помещайте ваш STATIC_ROOT в пределах вашего STATICFILES_DIRS.Из документов:

Предупреждение

Это (STATIC_ROOT) должно быть изначально пустым целевым каталогом для сбора статических файловиз их постоянных местоположений в один каталог для простоты развертывания;это не место для постоянного хранения ваших статических файлов.Вы должны сделать это ( тем, что они означают «хранить ваши статические файлы» ) в каталогах, которые будут найдены искателями staticfiles, которые по умолчанию являются подкаталогами «static /» приложения и любыми включенными вами каталогами.в STATICFILES_DIRS).

Примечание: рукописный текст был добавлен мной.


Поэтому я рекомендую следующую конфигурацию для вашего урегулирования.:

STATIC_ROOT = os.path.join(BASE_DIR, 'static_files')
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

Пока вы находитесь в режиме отладки, DEBUG=True, у вас все получится.Также нет необходимости добавлять STATIC_ROOT к urlpatterns, как вы это сделали в urls.py.Вы хотите сделать это, только если у вас нет django.contrib.staticfiles в вашем INSTALLED_APPS (см. здесь ).

В тот момент, когда вы хотите перейти к производству, посмотрите на , как это делается правильно .

Надеюсь, что это помогло и удачного кодирования!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...