2009-09-28 10 views
2

Est-ce que quelqu'un connaît un moyen de changer dynamiquement TEMPLATE_DIR dans django?Commutation de répertoire de modèle Django

Je dois créer un ensemble de modèles pour une version mobile et aimerais que les modèles soient placés à l'intérieur de leur propre répertoire plutôt que dans le répertoire du modèle racine: Je voudrais 2 modèles de modèles 'templates' et 'mobile_templates' pas besoin d'utiliser 'templates/mobile' pour ce dernier.

Dois-je écrire mon propre chargeur de modèles?

Répondre

2

Vous pouvez définir plusieurs répertoires de modèles dans votre fichier de paramètres et Django les recherchera dans l'ordre dans lequel vous les avez répertoriés. Le problème est qu'il ne se soucie pas si vous voulez template_x.html du répertoire a ou b. Si vous avez le même template_x dans le répertoire a et dans b, il tirera de ce qui est listé en premier ce qui peut être déroutant. Un bon moyen serait le suivant:

Avoir seulement 1 répertoire de template quelque part appelé 'templates'. À l'intérieur de ce dossier ont un dossier appelé «mobile» et un modèle appelé «par défaut» (ou peu importe). Ensuite, lorsque vous appelez votre modèle, vous devez également utiliser le chemin du répertoire.

À votre avis:

# some mobile view (everything omitted brevity) 
get_template('mobile/some_template.html') 

# some normal view (everything omitted brevity) 
get_template('default/some_template.html') 

Dans vos modèles:

Mobile Template:

{% extends 'mobile/base.html' %} 

Modèle normal:

{% extends 'default/base.html' %} 

Paramètres fichier:

TEMPLATE_DIRS = (
    'D:/some/path/to/templates', 
) 
+0

Ceci est probablement le meilleur. Si vos conventions de nommage sont bonnes (comme 'mobile_whatever.html'), tout ira bien. –

+0

Je voulais vraiment que le chargeur de template change son répertoire source en fonction de certains critères, mais je suppose que ce serait une approche plus sensée. – sleepyjames

Questions connexes