Est-il possible de faire en sorte que le chargeur de gabarits de Django exécute tous les gabarits qu'il charge (c'est-à-dire directement ou via extend/include) via SHPAML s'il indique que le HTML est obsolète? Je sais comment appeler SHPAML récursivement sur un répertoire entier, mais je préférerais pouvoir l'exécuter à la demande, donc je n'ai pas besoin de me souvenir de synchroniser le HTML chaque fois que je change la source SHPAML. J'imagine que l'appel de SHPAML à partir de manage.py fonctionnerait aussi (au moins pour les serveurs de test), mais être capable de pirater le moteur de gabarit de Django et le faire tourner tous les fichiers qu'il charge via un préprocesseur serait plus agréable.Pré-traiter SHPAML dans le chargeur de modèles de Django?
Répondre
Je pense que vous pouvez obtenir ce que vous voulez en héritant de django.template.loaders.app_directories.Loader
(ou tout autre chargeur que vous utilisez) et écrasez la méthode load_template_source
, par exemple:
from django.template.loaders.app_directories import Loader
from shpaml import convert_text
class SHPAMLLoader(Loader):
def load_template_source(self, *args, **kwargs):
shpaml_source = super(SHPAMLLoader, self).load_template_source(*args, **kwargs)
html = convert_text(shpaml_source)
return html
Ensuite, mettez votre chargeur au début de la TEMPLATE_LOADERS
tuple votre settings.py. Bien sûr, vous allez faire la danse SHPAML en HTML chaque fois qu'un gabarit est chargé, donc vous pouvez voir des frais généraux. La prochaine mise en cache de modèles Django 1.2, qui pourrait aider à atténuer cette surcharge ...
Avertissement: ce code est complètement non testé, désolé.
Ce n'est pas tout à fait ce que j'espérais, mais c'est assez proche. En particulier, cela ne facilite pas le problème de mise en cache (les modèles ne doivent être prétraités que lorsque le fichier source a été modifié, sinon le fichier prétraité doit être chargé, pas la source SHPAML). C'est probablement un pas dans la bonne direction, cependant. –
Juste créé un projet basé sur l'extrait dans la réponse de piquadrat. Il est un peu plus complète des fonctionnalités et prend en charge django 1.1 et 1.2 (probablement 1.0 aussi bien)
pensé qu'il pourrait être utile pour l'avenir :)
- 1. erreur prétraiter C++ dans le code
- 2. Commande de modèles Django
- 3. Modèles génériques de django
- 4. Comment intercepter et prétraiter QueryStrings dans Asp.Net
- 5. comparaison mathématique opérant dans Django modèles de
- 6. Modèles de groupe dans l'administrateur django
- 7. object_list de plusieurs modèles dans django
- 8. Modèles Django onchange de données
- 9. Comment séparer le chargeur de classe d'oreille et le chargeur de classe système dans JBoss 6?
- 10. Modèles Jinja2 vs django avec chargeur en cache - comment comparer les performances?
- 11. Django - Le inclus URLconf n'a pas de modèles dans ce
- 12. Modèles d'objets versions dans Django
- 13. Django: débogage dans les modèles
- 14. Agrégation Django dans les modèles?
- 15. Joining modèles différents dans Django
- 16. modèles de filtrage avec l'héritage de Django
- 17. modèles django objets filtrer
- 18. Modèles Django modélisation générique
- 19. jqGrid et modèles django
- 20. modèles Django vérifier l'état
- 21. Modèles Django "ifless", "ifgreater"
- 22. Réinitialisation du cache pour le chargeur de gabarit en cache de Django
- 23. Ajout de mini-caches aux modèles django
- 24. django refactorisation des modèles
- 25. Diminuer le nombre de requêtes DB des modèles Django
- 26. Conversion de fichiers jsp en modèles Django?
- 27. Itération index de dictionnaire dans les modèles de django
- 28. Champs de modèles dynamiques en django
- 29. Django: COUNTs multiples de deux modèles
- 30. Emacs, modèles Django et blocs de script
J'ai trouvé pour ajouter commandes à 'manage.py': http://docs.djangoproject.com/fr/1.1/howto/custom-management-commands/ --- malheureusement, cela n'aide pas avec la partie" sur demande ", cependant. –