Vous n'êtes pas identifié(e).
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
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
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
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
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
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
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
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
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
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
Ma configuration :
Debian + Python 2.6.6+ virtualenvwrapper
Hors ligne
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
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
> 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
Merci pour ton aide je vais essayer tout ça
Hors ligne