В Django файл css не загружен

#python #django #python-3.x

#python #django #python-3.x

Вопрос:

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

 #settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'bootstrap4',
    'myapp.apps.MyappConfig',
]

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

Моя структура каталогов.

 Projects
-assets
    —css
        —style.css
    —image
    —js
        —style.js
-media
-projects
    —__init__.py
    —settings.py
    —urls.py
    —wigs.py
-myapp
    —migrations
    —__init__.py
    —admin.py
    —apps.py
    —models.py
    —tests.py
    —views.py
  

base.html

 #html
<!DOCTYPE html>
{% load static %}
{% load bootstrap4 %}
{% bootstrap_css %}
{% bootstrap_javascript jquery='slim' %}

<html lang="ja">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <link href="https://fonts.googleapis.com/earlyaccess/sawarabigothic.css" rel="stylesheet" >

    <link href="{% static 'css/style.css' %}" rel="stylesheet">
    <title>Myapp</title>
    {% include "navi.html" %}
</head>
<body>
  {% block content %}{% endblock %}
  </div>
  <script src="{% static 'js/style.js' %}"></script>
</body>
</html>
  

Хотя его здесь нет, файл изображения может быть загружен.

 <div class="text-center" style="background-image: url({% static 'image/back-image.jpg' %});">
  

добавить изображение:
введите описание изображения здесь

Комментарии:

1. Можете ли вы загрузить файл, если перейдете по URL файла из браузера — 127.0.0.1:8000/static/css/style.css ?

2. @xyres да,я могу.

3. Это очень странно. Если вы можете получить доступ к своему файлу, используя URL, то браузер также должен иметь возможность загрузить его. Видите ли вы какие-либо ошибки в консоли вашего браузера? Кроме того, какое значение вы видите в href (проверьте его с помощью элемента Inspect ).

4. Я понимаю причину. Согласно Chrome, был загружен «static / css / style.css». Изменение «папки активов» на «статическую папку» решит проблему, но есть ли проблема с моими «STATICFILES_DIRS»?

5. Нет, имя папки на самом деле не имеет значения, потому что вы настроили его в STATICFILES_DIRS . Каково значение Content-Type заголовка для файла style.css в сетевом журнале вашего браузера?

Ответ №1:

Используйте этот код, вы должны связать css с «./static/css/style.css»

 #html
<!DOCTYPE html>
{% load static %}
{% load bootstrap4 %}
{% bootstrap_css %}
{% bootstrap_javascript jquery='slim' %}

<html lang="ja">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <link href="https://fonts.googleapis.com/earlyaccess/sawarabigothic.css" rel="stylesheet" >

    <link href="./static/css/style.css" rel="stylesheet">
    <title>Myapp</title>
    {% include "navi.html" %}
</head>
<body>
  {% block content %}{% endblock %}
  </div>
  <script src="{% static 'js/style.js' %}"></script>
</body>
</html>
  

Комментарии:

1. Но {% static ... %} тег автоматически выполняет это; вам не нужно жестко кодировать URL файла. Это не очень хорошая практика.

2. Я попробовал, но результат не изменился. Я изменил ‘static’ на ‘assets’ и попробовал.

Ответ №2:

Если вы используете сервер разработки (ie ‘./manage.py runserver’) затем вам необходимо включить следующее в свой urls.py

 urlpatterns  = static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns  = static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
  

Если выполняется в рабочей среде, убедитесь, что вы запустили ./manage.py collectstatic

И внутри settings.py убедитесь, что вы указали STATIC_ROOT

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

Ответ №3:

Добавьте приведенный ниже код в свой settings.py файл

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

После этого добавьте приведенный ниже код в свой основной проект urls.py

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

Надеюсь, это решит вашу проблему.