Джанго не может найти статические файлы. Нужна вторая пара глаз, я схожу с ума

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
      • ...
    • расстояние
      • ...
  • шаблон
    • base.html

Любая помощь будет принята с благодарностью. Я не знаю, что я мог сделать неправильно, я смотрел на код миллион раз, и, очевидно, в моем понимании того, как Django обслуживает статические файлы, должен быть пробел; Однако я сделал это ранее без проблем.

6 ответов

Решение

Сделайте следующее:

  1. Если вы находитесь в DEBUG, установите переменную STATICFILES_DIRS = ("path/to/static") в вашем settings.py. Затем он должен работать только в режиме отладки.

  2. Если вы хотите, чтобы он также работал в режиме развертывания, установите переменную 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 collectstaticDjango просматривает все каталоги, в которых находятся статические файлы, и помещает их в статический корень. При запуске в режиме развертывания статические файлы обслуживаются из этого каталога.

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

Эта команда очень помогла мне после того, как я застрял

Другие вопросы по тегам