Django-fr

Forum

  • Accueil
  • » Django-fr
  • » Intégrer des feuilles CSS au serveur de développement

#1 21-07-2012 01:51:24

Djok
Membre
Inscription : 12-07-2012
Messages : 26

Intégrer des feuilles CSS au serveur de développement

Bonjour,

je n'arrive pas à intégrer mes feuilles de styles au pages servies par le serveur de développement.
dans settings.py j'ai ajouté :

from os.path import dirname, join, abspath
TEST_ROOT=dirname(abspath(__file__))
MEDIA_ROOT=join(TEST_ROOT,"media")
MEDIA_URL = 'http://127.0.0.1:8080/media"

et dans l'urlpatterns de urls.py :

url(r'^media/(?P<path>.*)$','django.views.static.serve',{'document_root':settings.MEDIA_ROOT}),

Ces lignes sont censé indiquée au serveur l'emplacement des fichiers statiques et les faire servir au client...

Sauf que ça ne marche pas, le serveur me renvoi une erreur comme quoi settings n'est pas défini, sûrement un module que je n'importe pas...

Que dois je faire pour importer les feuilles de styles ?

Merci de votre aide

Dernière modification par Djok (21-07-2012 01:53:30)

Hors ligne

#2 21-07-2012 08:48:03

Xavier Ordoquy
Administrateur
Lieu : Puteaux, France
Inscription : 12-10-2011
Messages : 312
Site Web

Re : Intégrer des feuilles CSS au serveur de développement

Bonjour,

> from os.path import dirname, join, abspath
> TEST_ROOT=dirname(abspath(__file__))
> MEDIA_ROOT=(TEST_ROOT,"media")
> MEDIA_URL = 'http://127.0.0.1:8080/media"</code>
>
> et dans l'urlpatterns de urls.py :
> <code>url(r'^media/(?P<path>.*)$','django.views.static.serve',{'document_root':settings.MEDIA_ROOT}),</code>
>
> Ces lignes sont censé indiquée au serveur l'emplacement des fichiers
> statiques et les faire servir au client...

En supposant que tu utilises django 1.3 ou plus, tu as défini les fichiers media (ceux que les utilisateurs peuvent upoader) et non les fichiers statiques

> Sauf que ça ne marche pas, le serveur me renvoi une erreur comme quoi
> settings n'est pas défini, sûrement un module que je n'importe pas...

Sans erreur précise, il n'est pas possible de t'aider correctement.
Une mention comme quoi le settings n'est pas défini indiquerait que tu as oublié d'importer les settings quelque part.

Cordialement,
Xavier Ordoquy.

Hors ligne

#3 21-07-2012 14:38:28

Djok
Membre
Inscription : 12-07-2012
Messages : 26

Re : Intégrer des feuilles CSS au serveur de développement

Je suis en 1.4. J'ai résolu le problème en l'important du module django.conf. Je n'ai plus l'erreur.

En revanche ça ne marche toujours pas j'ai bien changer les valeurs de settings.py en renseignant STATIC_ROOT et STATIC_URL, puis en modifiant le fichier url, mais le serveur ne trouve pas la feuille de styles. J'obtiens une erreur 404 dans les logs du serveur :

"GET /css/style.css" HTTP 1.1  404 2280

.

Pourriez vous m'indiquer l'endroit de la documentation traitant du serveur de dev  svp ?

Merci pour la réponse

Hors ligne

#4 21-07-2012 17:59:42

Djok
Membre
Inscription : 12-07-2012
Messages : 26

Re : Intégrer des feuilles CSS au serveur de développement

J'ai résolu le problème une petite erreur dans le header de mon template.

Manifestement le serveur de développement n'est pas documenté.... En tout cas je n'ai pas trouvé

Hors ligne

#5 21-07-2012 18:13:31

David Thenon
Membre
Inscription : 11-08-2010
Messages : 156
Site Web

Re : Intégrer des feuilles CSS au serveur de développement

La documentation de Django est très exhaustive, pour le serveur de dev :

https://docs.djangoproject.com/en/dev/ref/django-admin/#runserver-port-or-
address-port

Mais ton problème se situe au niveau de l'utilisation des staticfiles dans
l'environnement de developpement :

https://docs.djangoproject.com/en/dev/howto/static-files/#serving-static-files-
in-development

Hors ligne

#6 21-07-2012 18:41:32

Djok
Membre
Inscription : 12-07-2012
Messages : 26

Re : Intégrer des feuilles CSS au serveur de développement

Grand merci pour les liens !!!

En fait j'ai survolé cette page en cherchant la section sur mage.py alors que tout est expliqué dans celle consacrée à django-admin.py. Je ne lis pas rapidement l'anglais et ce passage m'a échappé.

Le deuxième lien répond à toutes mes questions merci beaucoup.

Hors ligne

#7 21-07-2012 23:11:46

Djok
Membre
Inscription : 12-07-2012
Messages : 26

Re : Intégrer des feuilles CSS au serveur de développement

Maintenant que mes feuilles de styles fonctionnent, la mise en page de l'interface d'administration a sauté et pas que ça car d'après les logs du serveur les script ne sont plus chargé par le client... Comment peut-on conserver les deux (feuille de style du site + fichiers du site admin) ?

Hors ligne

#8 22-07-2012 05:27:40

Xavier Ordoquy
Administrateur
Lieu : Puteaux, France
Inscription : 12-10-2011
Messages : 312
Site Web

Re : Intégrer des feuilles CSS au serveur de développement

Bonjour,

Le 22 juil. 2012 à 00:11, Mr Djok a écrit :

> Maintenant que mes feuilles de styles fonctionnent, la mise en page de
> l'interface d'administration a sauté et pas que ça car d'après les logs
> du serveur les script ne sont plus chargé par le client... Comment peut-on
> conserver les deux (feuille de style du site + fichiers du site admin) ?

Manifestement, quelque chose dans ton configuration et / ou ton utilisation ne va pas.
Sans information sur ta configuration et la façon dont tu utilises les media et les statiques, nous ne pouvons que faire des suppositions au hasard...

Cordialement,
Xavier Ordoquy,
Linovia.

Hors ligne

#9 22-07-2012 05:48:27

Djok
Membre
Inscription : 12-07-2012
Messages : 26

Re : Intégrer des feuilles CSS au serveur de développement

oui il faudrait que je fasse une copie de mes fichiers de mon settings.py et mon urls.py...
Je fais ça tout à l'heure.

J'ai essayé la méthode décrite dans la documentation et ça ne marche pas... En fait celle que j'utilise vient d'un article et je l'ai résumée dans mon tout premier post, après correction de l'erreur sur les static et les media j'ai réussi a faire fonctionner les feuilles de styles mais qd j'ai voulu relancer l'interface admin la mise en page n'existait plus. J'ai ressayer de créer un nouveau projet pour voir où je m'étais trompé... J'ai l'impression que quand on configure le serveur pour qu'il fournissent les feuilles de styles il essaie de fournir les statiques de l'interface admin qui forcément ne se trouve pas dans le répertoire que je lui est donné. J'ai cherché partout les fichiers que le client recherché pour les mettre dans le même dossier, mais je ne les trouve pas. Les feuilles de styles doivent être générées dynamiquement...

Bref, je collerai tout à l'heure le contenu des fichiers en question.

Merci en tout cas

Hors ligne

#10 22-07-2012 08:23:09

Djok
Membre
Inscription : 12-07-2012
Messages : 26

Re : Intégrer des feuilles CSS au serveur de développement

Donc voilà mon settings.py

# Django settings for hs_django project.

DEBUG = True
TEMPLATE_DEBUG = DEBUG

ADMINS = (
    # ('MikMak', 'admin@admin.net),
)

MANAGERS = ADMINS

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': '/home/dev/envs/TestDjango/base/T-base',                      # Or path to database file if using sqlite3.
        'USER': '',                      # Not used with sqlite3.
        'PASSWORD': '',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}

# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# On Unix systems, a value of None will cause Django to use the same
# timezone as the operating system.
# If running in a Windows environment this must be set to the same as your
# system time zone.
TIME_ZONE = 'Europe/Paris'

# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'fr-fr'

SITE_ID = 1

# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True

# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale.
USE_L10N = True

# If you set this to False, Django will not use timezone-aware datetimes.
USE_TZ = True

# Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: "/home/media/media.lawrence.com/media/"
MEDIA_ROOT = ''

# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
# Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
MEDIA_URL = ''

# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/home/media/media.lawrence.com/static/"
STATIC_ROOT ='/home/dev/envs/TestDjango/static/'

# URL prefix for static files.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = 'http://127.0.0.1:8080/static/'

# Additional locations of static files
STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forgettest to use absolute paths, not relative paths.
    '/home/dev/envs/TestDjango/static/',
)

# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

# Make this unique, and don't share it with anybody.
SECRET_KEY = '-7ck=!bv-=_hjfgf(s+m#1xs))n=!mw@n)7s^j6ler'

# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

ROOT_URLCONF = 'test_dhango.urls'

# Python dotted path to the WSGI application used by Django's runserver.
WSGI_APPLICATION = 'hs_django.wsgi.application'

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    "/home/dev/envs/TestDjango/templates"
)

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    'django.contrib.admindocs',
    'test'
)

# A sample logging configuration. The only tangible logging
# performed by this configuration is to send an email to
# the site admins on every HTTP 500 error when DEBUG=False.
# See http://docs.djangoproject.com/en/dev/topics/logging for
# more details on how to customize your logging configuration.
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        }
    },
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        }
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
    }
}

le fichier urls.py :

from django.conf.urls import patterns, include, url
from django.conf import settings

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Uncomment the admin/doc line below to enable admin documentation:
    url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
    # Uncomment the next line to enable the admin:
    url(r'^admin/', include(admin.site.urls)),
    url(r'^test/',include('test.urls')),
    url(r'^static/(?P<path>.*)$','django.views.static.serve', {'document_root':settings.STATIC_ROOT}),
)

Dernière modification par Djok (22-07-2012 08:24:15)

Hors ligne

#11 22-07-2012 08:26:37

Djok
Membre
Inscription : 12-07-2012
Messages : 26

Re : Intégrer des feuilles CSS au serveur de développement

Ma configuration :
Debian + Python 2.6.6+ virtualenvwrapper

Hors ligne

#12 22-07-2012 13:40:01

David Thenon
Membre
Inscription : 11-08-2010
Messages : 156
Site Web

Re : Intégrer des feuilles CSS au serveur de développement

Salut,

Il te manque manifestement la variable ADMIN_MEDIA_PREFIX :

  ADMIN_MEDIA_PREFIX = '/static/admin/'

Qui contient l'url (relative ou absolu) vers les médias statiques de ton
admin. Donc c'est en général le répertoire "admin" placé dans le répertoire
qui diffuse tes fichiers statiques.

Donc pour reprendre ce que tu a mis dans tes settings ce serait :

  ADMIN_MEDIA_PREFIX = 'http://127.0.0.1:8080/static/admin/'

Mais note bien que l'url absolue avec le nom de domaine est inutile vu qu'en
général on diffuse les médias et fichiers statiques depuis le même domaine que
la webapp. On utilise donc l'url seulement quand on veut déporter les médias
et statiques sur un serveur de médias avec son propre domaine (genre un
"http://medias.monsupersite.com/") pour certaines raisons.

Je vois aussi que dans STATICFILES_DIRS tu utilises le chemin
"/home/dev/envs/TestDjango/static/" qui est le même que dans STATIC_ROOT, ce
qui est déconseillé dans la doc et même dans les settings ou tu a la mention :

  Don't put anything in this directory yourself; store your static files in
  apps' "static/" subdirectories and in STATICFILES_DIRS.

On ne doit pas mélanger le répertoire de diffusion des statiques et le
répertoire des statiques à collecter. C'est une notion expliquée dans la
documentation sur les staticfiles. Tu risques d'avoir des "clashs" avec des
apps externes si tu en utilises.

Et une dernière chose, tu a diffusé ton SECRET_KEY, donc je te conseille
fortement de le changer pour la mise en production.

Hors ligne

#13 22-07-2012 16:10:34

Djok
Membre
Inscription : 12-07-2012
Messages : 26

Re : Intégrer des feuilles CSS au serveur de développement

Merci !

Il te manque manifestement la variable ADMIN_MEDIA_PREFIX :

  ADMIN_MEDIA_PREFIX = '/static/admin/'

Je vais la rajouter tout de suite.

Donc c'est en général le répertoire "admin" placé dans le répertoire
qui diffuse tes fichiers statiques.
[...]
On ne doit pas mélanger le répertoire de diffusion des statiques et le
répertoire des statiques à collecter.

Je dois créer des répertoires vides en fait pour qu'il soit utilisés par le serveur ?

Je vois aussi que dans STATICFILES_DIRS tu utilises le chemin
"/home/dev/envs/TestDjango/static/" qui est le même que dans STATIC_ROOT, ce
qui est déconseillé dans la doc et même dans les settings

c'est vrai je l'ai lu aussi, j'ai essayé plusieurs choses à force de toucher, je vais enlever la ligne, car :

"clashs" avec des apps externes si tu en utilises.

comme l'interface admin est une application externe c'est peut être à cause de ça...

Et une dernière chose, tu a diffusé ton SECRET_KEY, donc je te conseille
fortement de le changer pour la mise en production.

J'ai changé quelques caractères, et puis au train où vont les choses j'ai l'impression que la production c'est pas pour bientôt...

Merci pour ces précisions.

Hors ligne

#14 22-07-2012 16:23:50

David Thenon
Membre
Inscription : 11-08-2010
Messages : 156
Site Web

Re : Intégrer des feuilles CSS au serveur de développement

> Je dois créer des répertoires vides en fait pour qu'il soit utilisés
> par le serveur ?

Non, mais le principe est là, le chemin que tu indique dans le STATIC_ROOT
doit pointer effectivement vers un répertoire vide, du moins ou tu n'y a rien
mis.

En mode DEBUG (serveur de dev) django l'utilisera tout seul comme un mirroir
des emplacements de fichiers statiques dont il a connaissance (ceux des apps
installés et ceux indiqués dans 'STATICFILES_DIRS') sans y écrire quoique ce
soit.

Et en production, tu le fera remplir "automatiquement" par django en utilisant
la commande "django-admin collectstatic" (voir la doc pour les détails) qui
ira collecter les fichiers statiques à partir des emplacements dont il a
connaissance.

> comme l'interface admin est une application externe c'est peut être à
> cause de ça...

Quand je dis un clash, c'est que tu aura des fichiers écrasés ou différents de
ce que tu attends, mais ça n'a pas d'impact sur leur résolution (qui pourrait
donner un 404).

Les statics de l'admin faisant partie de son app (contrib.admin) qui est
installée dans tes settings (aka 'INSTALLED_APPS'), Django en a connaissance
donc tu n'a besoin de rien faire, ni les renseigner dans STATICFILES_DIRS, ni
les copier toi même dans ton répertoire de statics. Du moins si ta webapp est
configurée et que ADMIN_MEDIA_PREFIX soit cohérent avec cette configuration.

Hors ligne

#15 22-07-2012 17:26:00

Djok
Membre
Inscription : 12-07-2012
Messages : 26

Re : Intégrer des feuilles CSS au serveur de développement

Merci pour ton aide je vais essayer tout ça

Hors ligne

  • Accueil
  • » Django-fr
  • » Intégrer des feuilles CSS au serveur de développement

Pied de page des forums