Partage
  • Partager sur Facebook
  • Partager sur Twitter

Django et les chemins de fichiers static et media

    11 février 2017 à 17:46:09

    Bonjour les pythonistes du Django,

    Je m'imprègne du cours sur Django depuis un mois.

    Il est super, il décortique bien les étapes unes à unes.

    Je suis d'autant plus motivée que je mets actuellement en pratique car j'ai un projet personnel auquel j'essaie de donner une forme et une existance via Django.

    Je me borne cependant à un sérieux problème, depuis hier après-midi j'ai expérimenté au pif au mètre plein de choses mais en vain, rien ne marche.

    Mon problème est le suivant : les fichiers de type images ne sont pas affichés sur ma page web et je doute que les fichiers js soient pris en compte

    J'ai créé dans mon application player ces chemins de dossier : static/player/images, static/player/js, static/player/style.css

    Dans mon fichier player.html, je fais ce lien vers la feuille de style : static/style.css, je précise que cette feuille de style est prise en compte en terme de police... mais toutes les images de background dont les liens sont indiqués dans la feuille de style n'apparaissent pas!

    D'autre part, voici un lien de script js : ../static/player/js/jquery.js j'ai essayé plein de choses et ce lien est encore celui qui fait le moins mal car  si le chemin est inefficace, la page s'affiche en outre correctement.

    Je suis un peu perdue dans les chemins, j'ai tout essayé même les plus simples mais rien n'y fait. Sachant que j'ai configuré mon settings.py avec le chemin "/static/" et aussi le chemin de base "/media/" et que les fichiers media de type photo ne s'affichent pas non plus alors que les objets de type texte enregistrés dans la base de données s'affichent eux sans problème et que mon fichier media/ est à la racine du projet et configuré comme tel dans mon settings.py

    Avez-vous une idée? Je crois que j'ai encore besoin de piger certains trucs:euh:

    Merci pour vos retours parce que je prends vraiment plaisir à découvrir Django grâce à vous, et la modularité de l'administration est démente!

    • Partager sur Facebook
    • Partager sur Twitter
      16 février 2017 à 18:42:43

      Montre-nous ton settings.py et un template html pour voir
      • Partager sur Facebook
      • Partager sur Twitter
        16 février 2017 à 20:57:36

        Bonsoir Zeroabsolu,

        Merci de t'intéresser à mon cas, voici mon settings.py :

        import os
        
        # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
        BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
        
        
        # Quick-start development settings - unsuitable for production
        # See https://docs.djangoproject.com/en/1.10/howto/deployment/checklist/
        
        # SECURITY WARNING: keep the secret key used in production secret!
        SECRET_KEY = '22)&j60unmps^zgpi)%zs8wqb5xzm2-y8z%ox$d872k6%qaofv'
        
        # SECURITY WARNING: don't run with debug turned on in production!
        DEBUG = True
        
        ALLOWED_HOSTS = []
        
        MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
        
        MEDIA_URL = '/media/'
        
        # Application definition
        
        INSTALLED_APPS = [
            'django.contrib.admin',
            'django.contrib.auth',
            'django.contrib.contenttypes',
            'django.contrib.sessions',
            'django.contrib.messages',
            'django.contrib.staticfiles',
            'player',
        ]
        
        MIDDLEWARE = [
            'django.middleware.security.SecurityMiddleware',
            'django.contrib.sessions.middleware.SessionMiddleware',
            'django.middleware.common.CommonMiddleware',
            'django.middleware.csrf.CsrfViewMiddleware',
            'django.contrib.auth.middleware.AuthenticationMiddleware',
            'django.contrib.messages.middleware.MessageMiddleware',
            'django.middleware.clickjacking.XFrameOptionsMiddleware',
        ]
        
        ROOT_URLCONF = 'reine_laure.urls'
        
        TEMPLATES = [
            {
                'BACKEND': 'django.template.backends.django.DjangoTemplates',
                'DIRS': [os.path.join(BASE_DIR, 'templates')],
                'APP_DIRS': True,
                'OPTIONS': {
                    'context_processors': [
                        'django.template.context_processors.debug',
                        'django.template.context_processors.request',
                        'django.contrib.auth.context_processors.auth',
                        'django.contrib.messages.context_processors.messages',
                    ],
                },
            },
        ]
        
        TEMPLATE_DIRS = (
          'Users/laure/reine_laure/reine_laure/templates/',
        )
        
        
        
        
        WSGI_APPLICATION = 'reine_laure.wsgi.application'
        
        
        # Database
        # https://docs.djangoproject.com/en/1.10/ref/settings/#databases
        
        DATABASES = {
            'default': {
                'ENGINE': 'django.db.backends.sqlite3',
                'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
            }
        }
        
        
        # Password validation
        # https://docs.djangoproject.com/en/1.10/ref/settings/#auth-password-validators
        
        AUTH_PASSWORD_VALIDATORS = [
            {
                'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
            },
            {
                'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
            },
            {
                'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
            },
            {
                'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
            },
        ]
        
        
        # Internationalization
        # https://docs.djangoproject.com/en/1.10/topics/i18n/
        
        LANGUAGE_CODE = 'en-us'
        
        TIME_ZONE = 'UTC'
        
        USE_I18N = True
        
        USE_L10N = True
        
        USE_TZ = True
        
        
        # Static files (CSS, JavaScript, Images)
        # https://docs.djangoproject.com/en/1.10/howto/static-files/
        STATIC_ROOT = '/home/laure/reine_laure/static/'
        STATIC_URL = '/static/'
        STATICFILES_DIRS = (
        
            os.path.join(BASE_DIR, 'static'),
        
        
        )
        

        Et voici un template html :

        {% extends "player/base.html" %}
        {% load static %}
        
        
        
         {% block head %}
              <title> Accueil</title>
              <meta charset="utf-8">
              <meta name="viewport" content="width=device-width, initial-scale=1.0">
              <style> @import url('https://fonts.googleapis.com/css?family=Pattaya');
                </style>
        
                {% block head-medias %}
                <link rel="stylesheet" href="static/style.css"/> 
              {% endblock %}
        
            {% endblock %}
          </head>
        
        
        
        {% block content %}
            <div id="contenu">
        <div id= "music">
        <div id="container">
            <div id="audio-image">
                <img class="cover" />
            </div>
            <div id="audio-player">
                <div id="audio-info">
                    <span class="artist"></span> - <span class="title"></span>
                </div>
                 <input id="volume" type="range" min="0" max="10" value="5" />
                 <br>
                 <div id="buttons">
                 <span>
                    <button id="prev"></button>
                    <button id="play"></button>
                    <button id="pause"></button>
                    <button id="stop"></button>
                    <button id="next"></button>
                    </span>
                 </div>
                 <div class="clearfix"></div>
                 <div id="tracker">
                    <div id="progressBar">
                        <span id="progress"></span>
                    </div>
                    <span id="duration"></span>
                 </div>
                 <div class="clearfix"></div>
        
        {% for piste in pistes %}
                 <ul id="playlist" class="hidden">
                    <li song="{{piste.auteur}} - {{piste.titre}}" cover="{{piste.image}}" artist="{{piste.auteur}}">{{piste.son}}</li></br>
                    
                </ul>
            </div>
        
        </div>
        <div id="meta">
        <div id="text-son">
        <h2> </h2>
        <p>Date de publication : </p>
        <p>{{piste.date}}</p>
        <p>{{piste.contenu}}</p>
        <p>{{piste.lecteur}}</p>
        <p>{{piste.image_ref}}</p>
        </div>
        
        
        {% empty %}
          <p>Aucune Piste</p>
        {% endfor %}
        
        
        <div id="categorie">
        <p>blaaaaaaaaaaaaaaaaaabmaaaaaaaaaaaaaaaaaabpaaaaaaaaaa</p>
        </div>
        </div>
        
        </div>
        {% endblock %}
        
        {% block extra-medias %}
        <script src="static/player/js/jquery.js"></script>
        <script src="static/player/js/main.js"></script>
        {% endblock %}




        • Partager sur Facebook
        • Partager sur Twitter
          16 février 2017 à 21:15:17

          Je pense qu'il faut enlever la ligne STATIC_ROOT
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            17 février 2017 à 14:25:37

            tout dépend : est-tu en développement ou en production ? vu ton DEBUG = TRUE, je dirais en dev => du coup enlève ton STATIC_ROOT et MEDIA_ROOT

            Vérifie bien que tu es tes images dans BASE_DIR/app/static , que tu n'es pas d'erreur de chemin, ...

            Bonne chance

            • Partager sur Facebook
            • Partager sur Twitter
              17 février 2017 à 15:15:24

              Bonjour Zeroabsolu et mister-benoit,

              Je suis en développement, j'ai supprimé ce que vous me dites mais je suis encore coincée, voici exactement comment est organisé le projet, j'ai repris la méthodologie du cours en créant des dossiers du noms de l'application dnas les dossiers static... J'ai peut-être oublié quelque chose quelque part :

              • Partager sur Facebook
              • Partager sur Twitter
                17 février 2017 à 18:14:01

                Ok je pense que c'est parce que tu t'es trompé en écrivant l'url relative de tes fichiers statiques dans tes templates.

                Par exemple tu as écrit :

                <link rel="stylesheet" href="static/style.css"/>

                alors qu'il faudrait écrire :

                <link rel="stylesheet" href="{% static "style.css" %}"/>

                et Django remplacerait cela par:

                <link rel="stylesheet" href="/static/style.css" />





                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  17 février 2017 à 18:39:44

                  zeroabsolu57 a écrit:

                  <link rel="stylesheet" href="{% static "style.css" %}"/>

                  Je dirais plutôt :

                  <link rel="stylesheet" href="{% static "player/style.css" %}"/>

                  ton fichier style.css se situe dans le dossier player/ de static

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Django et les chemins de fichiers static et media

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown