2009-02-05 6 views
2

J'ai un site Django mis en place qui utilise le panneau d'administration Django, préfixé par /media/, ainsi que le contenu du site statique dans un répertoire appelé /static/. Bien sûr, le contenu des médias d'administration réside dans le package Django et le contenu statique du site est stocké avec le code Python du site.Avec Django, quelle est la bonne façon de configurer les chemins vers le contenu d'administration et le contenu statique?

Actuellement, mes public_html ne contient que des liens symboliques portant un nom approprié aux répertoires qui en fait détiennent le contenu statique, comme suit:

~/public_html/ 
    .htaccess 
    media -> $HOME/usr/lib/python2.4/site-packages/django/contrib/admin/media/ 
    site.fcgi 
    site -> $HOME/mysite/public/static/ 

Et ce sont les règles de réécriture que je utilise dans mon dossier .htaccess:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ site.fcgi/$1 [QSA,L] 

Cependant, l'utilisation des liens symboliques de cette manière se sent comme un ... hack, et il semble que je pourrais utiliser des règles de réécriture du .htaccess pour éviter d'utiliser des liens symboliques. (Je veux aussi éventuellement ajouter un fichier robots.txt et un fichier favicon, sans avoir à ajouter - et maintenir - un tas de liens symboliques.) Est-ce une bonne idée, et si oui, comment faire?


Pour référence future, j'ai finalement fait quelque chose de similaire à la façon dont les projets Rails sont généralement mis en place. Mon projet Django contient un répertoire public, qui comprend le contenu du site statique, le script FastCGI et le fichier .htaccess, entre autres, de sorte qu'il ressemble un peu comme ceci:

~/ 
    django/ 
     public/ 
      .htaccess 
      content/ 
      favicon.ico 
      [email protected] -> /symlink/to/django/admin/media/ 
      site.fcgi 
      static/ 

Et puis, ~/public_html est tout simplement un lien symbolique sur ~/django/public. Tout fonctionne bien, alors je suis content.

+0

Etes-vous limité à l'installation sous un compte d'utilisateur et en utilisant .htaccess au lieu de modifier la configuration d'Apache? Si oui, veuillez l'indiquer dans la question. – akaihola

Répondre

3

je viens d'utiliser

Alias /media /home/akaihola/usr/lib/python2.4/site-packages/django/contrib/admin/media/ 
Alias /static /home/akaihola/mysite/public/static/ 

mais je le fais dans un vrai fichier de configuration Apache au lieu de .htaccess et j'utilise mod_wsgi, bien que je ne sache pas si cela fait une différence.

+0

Je pense que oui - d'après ce que je comprends (en lisant la documentation et en naviguant en ligne), vous ne pouvez pas utiliser mod_alias dans un fichier .htaccess. En tout cas, je sais que mon serveur ne le permet pas, parce que j'ai eu une erreur à propos de mod_alias quand j'ai essayé ce que vous avez suggéré. – mipadi

1

Je ne soit ... lien symbolique vers

J'utilise les réécritures du serveur Web au point /media/(.*) directement à mon répertoire des médias et /admin\-media/(.*) directement à mes médias admin. Je devrais souligner que ces réécritures se produisent avant d'arriver à la réécriture de django fastcgi. Je vous donnerais mon code, mais j'utilise Cherokee au lieu d'Apache.

Je ne vois pas pourquoi vous avez besoin d'avoir une représentation « physique » dans la racine de votre site ...

+0

Moi non plus, c'est pourquoi je demande comment y remédier. ;) – mipadi

+0

Je viens d'expliquer comment. Réécrivez à leurs emplacements absolus (réels) plutôt que de symlinker et de réécrire les liens symboliques. – Oli

+0

Je sais quoi faire, mais pas comment le faire correctement en utilisant mod_rewrite. Je ne suis pas très familier avec les règles de réécriture. – mipadi

4

Les liens symboliques ne sont pas un "hack" - ce sont des entités légitimes et utiles dans le système de fichiers. Ils ne sont ni plus ni moins fragiles que n'importe quel type de fichier, ils réduisent la redondance et réduisent la quantité de configuration d'apache que vous devez faire. Je ne suis pas tout à fait la raison pour laquelle vous voudriez les éviter. La solution de lien symbolique est beaucoup plus élégante que l'écriture de règles apache, IMO.