Обслуживание статического файла на Django - PullRequest
0 голосов
/ 03 октября 2019

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

Статическая папка находится в том же каталоге, что и manage.py.

Кроме того, я установил WitheNoise, но он такжене решил проблему.

Кроме того: я использую Docker, я сделал сбор статических и проверил контейнер. Все файлы находятся там правильно.

Версия Django = 2.0.1

Среда разработки

Структура кода:

Project

- assets
- config
- docs
- project-root
- - static
- - manage.py
- - templates
- - apps
- - project-root
- - - settings.py
- - - urls.py
...
...

setting.py

INSTALLED_APPS = [
    'pages.apps.PagesConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

STATIC_URL = '/static/'
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

html файл

{% load static %}
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <!-- Bootstrap -->
  <link rel="stylesheet" href="{% static "css/bootstrap.css" %}">
  <link rel="stylesheet" href="{% static "css/jquery.bxslider.css" %}">
  <!-- Custom -->
  <link rel="stylesheet" href="{% static "css/style.css" %}">
  <link rel="stylesheet" href="{% static "css/animate.css" %}">

</head>

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

Ответы [ 2 ]

0 голосов
/ 03 октября 2019

Отредактируйте файл settings.py и добавьте WhiteNoise в список MIDDLEWARE. Промежуточное программное обеспечение WhiteNoise следует размещать непосредственно после Django SecurityMiddleware (если вы его используете) и перед всем другим промежуточным программным обеспечением.

MIDDLEWARE = [
  'django.middleware.security.SecurityMiddleware',
  'whitenoise.middleware.WhiteNoiseMiddleware',
  #(Rest of the Middleware here)
]

Маршруты для белого кэша и статических файлов:

STATIC_URL = '/static/'
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

И запустите collectstatic

django-admin collectstatic

или

python3 manage.py collecstatic

Если вы хотите запустить внутри контейнера Docker, вот дополнительная информация

https://docs.docker.com/engine/reference/commandline/exec/

Больше информации о Whitenoise:

http://whitenoise.evans.io/en/stable/django.html#

0 голосов
/ 03 октября 2019

Версия Django не упоминается в вопросе, а также среда - (производство / разработка)

-В последних версиях python вместо {% load staticfiles %}* 1004 рекомендуется {% load static%}*

-Если Debug is True и если django.contrib.staticfiles отсутствует в INSTALLED_APP -

, либо добавьте django.contrib.staticfiles к INSTALLED_APP или добавьте static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) к urlpatterns для обслуживания статических файлов.

  • Также для статических файлов, отсутствующих в папках приложения, каталог должен быть указан в STATICFILES_DIRS-
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),
    'any_other_locations',
]

...