2011-02-01 5 views
13

Comme tout autre utilisateur de l'utilisateur django, je sers des fichiers statiques. J'ai choisi d'utiliser django-staticfiles pour être prêt pour django 1.3 qui l'intégrera en principe into the core.Django: css référençant des médias dans des fichiers statiques (django dev/1.3/fichiers statiques)

Ma question est plutôt simple: elle fonctionne très bien pour rassembler plusieurs sources multimédia et les référencer de manière uniforme dans les modèles django. Cependant, j'utilise souvent une formation d'image dans Css comme ceci:

#itemname { background-image: url('/path/to/image.png'); } 

Ma question est simple - si j'utilise des noms absolus, je dois coder en dur eux. Si j'utilise des noms relatifs, le déplacement vers des URL "sous-répertoire" désactive l'emplacement de la ressource pour ces éléments et ils ne peuvent pas être chargés. Alors, comment puis-je étendre cette solution à CSS? Ladite solution doit éviter:

  • Intégration en html css. Personnellement, j'évite cela.
  • Utilisation d'URL codées en dur. Cela ne fonctionne pas très bien parce que sur ma configuration locale, j'utilise typiquement 'localhost/project' avec apache pour tester (mod_wsgi) alors que j'ai tendance à utiliser project.com pour le déploiement.

Idées?

Répondre

19

Vous avez dit que vous aviez des problèmes avec les chemins relatifs, mais je ne comprends pas exactement ce que vous vouliez dire.

J'ai rencontré le même problème et j'ai utilisé des chemins relatifs pour le résoudre. La seule chose à garder à l'esprit est que lorsque vous déployez les images doivent (de toute évidence) rester dans le même chemin par rapport aux fichiers CSS.

Ma configuration en un mot:

Remarque J'utilise toujours django-staticfiles avec Django 1.2, mais il devrait fonctionner de même pour Django 1,3

STATIC_URL = "/site_media/static/" 
STATIC_ROOT = os.path.join(PROJECT_ROOT, "site_media", "static") 
STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, "static_media"), 
) 

Alors je sers le CSS de {{ STATIC_URL }}css/style.css qui fait référence à des images au ../images/logo.png.

et mon projet ressemble à ceci:

project_dir 
    ... 
    stuff 
    static_media 
    ... 
    css 
    images 

Laissez-moi savoir si vous avez des questions, et je vais préciser.

+0

Le bit dont je ne suis pas sûr, maintenant vous avez répondu - y a-t-il des urls 'background-image' css relatives au fichier css, ou l'URL à partir de laquelle la page est servie?Si le premier, je suis trié, parce que je peux utiliser exactement ce que vous avez décrit. –

+0

Juste testé dehors - relatif semble fonctionner en CSS. Je suis content de ça. Avoir une tique! –

+0

@John, PROJECT_ROOT est également défini quelque part par vous ou il est automatiquement défini par le Django comme votre racine de projet actuelle (où votre manage.py repose). Si vous définissez vous-même PROJECT_ROOT, vous devez le modifier en fonction de son environnement de développement ou de production (car la structure du répertoire) des deux peut être différente. – David

1

Ok,

Je ne sais pas s'il y a quelque chose de mal avec @ solution de John, mais il n'a pas travaillé pour moi alors je mets ce code sur le CSS

{% load static %} 
{% get_static_prefix as STATIC_PREFIX %} 

et

<link rel="stylesheet" href="{{ STATIC_PREFIX }}css/main.css"> 

J'espère que ça aide!

+0

Cela signifie que tous vos stylesheed doivent être analysés comme un modèle ... pensez à les mettre en cache! – Stefano

Questions connexes