Джанго не может найти статические файлы. Нужна вторая пара глаз, я схожу с ума
Django не будет обслуживать мои статические файлы. Вот возвращенная ошибка:
[13/Jun/2014 06:12:09] "GET /refund/ HTTP/1.1" 200 2927
[13/Jun/2014 06:12:09] "GET /static/css/bootstrap.min.css HTTP/1.1" 404 1667
[13/Jun/2014 06:12:09] "GET /static/css/cover.css HTTP/1.1" 404 1643
[13/Jun/2014 06:12:09] "GET /static/js/bootstrap.min.js HTTP/1.1" 404 1661
[13/Jun/2014 06:12:09] "GET /static/assets/js/docs.min.js HTTP/1.1" 404 1667
[13/Jun/2014 06:12:09] "GET /static/js/bootstrap.min.js HTTP/1.1" 404 1661
[13/Jun/2014 06:12:09] "GET /static/assets/js/docs.min.js HTTP/1.1" 404 1667
Вот соответствующая часть моего base.html для начальной загрузки:
!DOCTYPE html>
<html lang="en">
{% load static %}
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="author" content="">
<link rel="shortcut icon" href="../../assets/ico/favicon.ico">
<title>Cover Template for Bootstrap</title>
<!-- Bootstrap core CSS -->
{
<link href="{% static "css/bootstrap.min.css"%}" rel="stylesheet">
<!-- Custom styles for this template -->
<link href="{% static "css/cover.css" %}" rel="stylesheet">
Соответствующий код из settings.py (Примечание: шаблоны работали просто отлично.)
TEMPLATE_DIRS = (
os.path.join(BASE_DIR, 'templates'),
)
STATIC_URL = '/static/'
STATIC_ROOT = ''
А вот как устроен мой проект Django:
- админ
- db.sqlite3
- название проекта
- manage.py
- Имя приложения
- статический
- CSS
- ...
- расстояние
- ...
- CSS
- шаблон
- base.html
Любая помощь будет принята с благодарностью. Я не знаю, что я мог сделать неправильно, я смотрел на код миллион раз, и, очевидно, в моем понимании того, как Django обслуживает статические файлы, должен быть пробел; Однако я сделал это ранее без проблем.
6 ответов
Сделайте следующее:
Если вы находитесь в DEBUG, установите переменную STATICFILES_DIRS = ("path/to/static") в вашем settings.py. Затем он должен работать только в режиме отладки.
Если вы хотите, чтобы он также работал в режиме развертывания, установите переменную STATIC_ROOT = ("path/to/static_root") в settings.py. Затем выполните
python manage.py collectstatic
и это тоже должно работать.
А теперь, чтобы лучше понять, как django управляет статическими файлами:
Django имеет несколько предопределенных мест для поиска статических файлов и их сбора, вы указываете, где их искать, с помощью STATICFILES_FINDERS в вашем файле settings.py. По умолчанию он ищет статическую папку внутри ваших приложений. Вы можете указать Django искать статические файлы в других частях, установив переменную STATICFILES_DIRS (список или кортеж путей).
В режиме DEBUG статические файлы выбираются по этим путям (а не из static_root, где вы собираете свои файлы).
Когда вы выполняете
python manage.py collectstatic
Django просматривает все каталоги, в которых находятся статические файлы, и помещает их в статический корень. При запуске в режиме развертывания статические файлы обслуживаются из этого каталога.
PS: что я обычно делаю, это создаю приложение под названием common и создаю статический dir внутри, чтобы разместить все общие css, js для моего проекта (а также для шаблонов). Таким образом, мне не нужно указывать переменную STATICFILES_DIRS.
Надеюсь теперь понятно =).
Измените STATIC_ROOT settings.py, надеюсь, это будет работать. Я сталкиваюсь с той же проблемой....
TEMPLATE_DIRS = (
os.path.join(BASE_DIR, 'templates'),
)
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static')
STATIC_URL = '/static/'
Ну, просто пройдя Учебник, я застрял с этой проблемой в значительной степени. Простой перезапуск веб-сервиса исправил это. Так что, если вы просто выполняете инструкции Tutorial, поместите директорию static//style.css внутри директории с именем
{% load staticfiles %}
<link rel="stylesheet" type="text/css" href="{% static '<your_app_name>/style.css' %}" />
внутри заголовка html-файла (например, index.html), который должен быть разработан с этим css-файлом.
Измените свой TEMPLATE_DIRS в соответствии с его версией
Если ваша версия 3.1 или ниже
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'templates'),)
Если он выше 3,2
STATICFILES_DIRS = [
BASE_DIR / "static",]
проверьте эту ссылку для большей ясности
У меня проблема со статическими файлами в Django, чтобы узнать, что происходит, когда статические файлы не загружаются и не отображаются в моем проекте в режиме сервера запуска, требуется один день.
наконец я нашел, где проблема ...
Я полагаю, что эта проблема из-за проблем с разрешениями в вашей файловой системе. вам нужно получить разрешение на статические файлы в вашем проекте, и вы видите, что проблема решена.
в Linux вы можете запустить эту команду:
sudo chmod 777 <your static folder relative address> -R
python manage.py collectstatic
Эта команда очень помогла мне после того, как я застрял