web-dev-qa-db-fra.com

Django ne peut pas trouver de fichiers statiques. Besoin d'une deuxième paire d'yeux, je deviens fou

Django ne servira pas mes fichiers statiques. Voici le error retourné:

[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

Voici la partie pertinente de mon base.html pour bootstrap:

!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">

Code pertinent de settings.py (Remarque: les modèles ont très bien fonctionné.)

TEMPLATE_DIRS = (
    os.path.join(BASE_DIR, 'templates'),
)

STATIC_URL = '/static/'

STATIC_ROOT = ''

Et voici comment mon projet Django est présenté:

  • admin
  • db.sqlite3
  • nom du projet
  • gérer.py
  • nom de l'application
  • statique
    • css
      • ...
    • dist
      • ...
  • modèle
    • base.html

Toute aide serait grandement appréciée. Je ne sais pas ce que j'ai pu mal faire, j'ai consulté le code un million de fois et, de toute évidence, ma compréhension de la façon dont Django sert les fichiers statiques doit être béate. Cependant, j'ai déjà fait cela auparavant sans aucun problème. 

12
CowardlyFrench

faire ce qui suit:

  1. Si vous êtes dans DEBUG, définissez la variable STATICFILES_DIRS = ("chemin/vers/statique") dans votre fichier settings.py. Cela devrait alors fonctionner seulement en mode DEBUG.

  2. Si vous souhaitez qu'il fonctionne également en mode de déploiement, définissez la variable STATIC_ROOT = ("chemin/vers/static_root") dans le fichier settings.py. Ensuite, exécutez python manage.py collectstatic et cela devrait également fonctionner.

Et maintenant, pour mieux comprendre comment Django gère les fichiers statiques:

  • Django a des emplacements prédéfinis pour rechercher et collecter des fichiers statiques, vous spécifiez où les trouver avec STATICFILES_FINDERS dans votre fichier settings.py. Par défaut, il recherche le dossier statique inside vos applications. Vous pouvez demander à Django de rechercher des fichiers statiques dans d'autres parties en définissant la variable STATICFILES_DIRS (liste ou Tuple de chemins).

  • En mode DEBUG, les fichiers static sont choisis dans ces chemins (et non dans la racine static où vous collectez vos fichiers).

  • Lorsque vous exécutez python manage.py collectstatic, Django parcourt tous les répertoires dans lesquels des fichiers statiques peuvent être trouvés et les place dans votre racine statique. Lorsque vous exécutez en mode de déploiement, les fichiers statiques sont servis à partir de ce répertoire.

PS: Ce que je fais normalement, c’est de créer une application appelée common et de créer un répertoire statique à l’intérieur pour placer tous les fichiers communs css, js pour mon projet (ainsi que pour les modèles). De cette façon, je n'ai pas à spécifier la variable STATICFILES_DIRS.

J'espère que c'est clair maintenant =).

27
argaen

En parcourant le didacticiel, ce problème me tenait à cœur. Redémarrer simplement le service Web a corrigé le problème. Donc, si vous venez de compléter les instructions du didacticiel, mettez un répertoire static // style.css dans le répertoire nommé, tout en mettant

{% load staticfiles %}
<link rel="stylesheet" type="text/css" href="{% static '<your_app_name>/style.css' %}" />

à l'intérieur de la section head d'un fichier HTML (par exemple, index.html ) qui devrait être conçu avec ce fichier css.

3
efi

Changez STATIC_ROOT de settings.py, j'espère que ça va marcher. Je fais face au même problème ....

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/'
0
Jahir islam