#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)
Надеюсь, это решит вашу проблему.