2009-01-22 9 views
1

J'ai un CMS qui prend un contenu dynamique et le rend à l'aide d'un modèle standard. Cependant, j'utilise maintenant des balises de gabarit dans le contenu dynamique lui-même, donc je dois faire un render_to_string et ensuite passer les résultats de cela en tant que variable de contexte à render_to_response. Cela semble gaspiller.Modèles dans les modèles. Comment éviter le rendu deux fois?

Quelle est la meilleure façon de faire cela?

+0

Eh bien, ne mettez pas de balises de gabarit dans le contenu dynamique – nosklo

Répondre

2

"Cela semble inutile" Pourquoi cela semble-t-il?

Chaque modèle est un mélange d'étiquettes et de texte. Dans votre cas, un bloc de texte a déjà été visité par un moteur de template. Et alors? Une fois transformée, c'est juste du texte et passe très vite par le moteur de template suivant.

Avez-vous des problèmes de performances spécifiques? Ne répondez-vous pas aux exigences de débit de vos transactions? Y a-t-il un problème spécifique?

Le code est-il trop complexe? Est-ce difficile à maintenir? Est-ce que ça casse tout le temps?

Je pense que votre solution est adéquate. Je ne suis pas sûr que les balises de gabarit dans le contenu dynamique soient bonnes du point de vue du débogage, mais d'un point de vue basique du "rendu des gabarits", tout va bien.

+0

Bon point. Peut-être est-ce un cas d '«optimisation prématurée» ... –

+0

Exactement exact, sur les deux plans (semble être un mauvais design, mais pas pour des raisons de performance). +1 –

0

Ce que vous faites semble très bien, mais la question pourrait être posée: Pourquoi ne pas mettre les références de templatetag directement dans votre modèle au lieu de les rendre manuellement?

<div> 
    {% if object matches some criteria %} 
     {% render_type1_object object %} 
    {% else %} 
     {% render_type2_object object %} 
    {% endif % 
    ... etc ... 
</div> 

Ou, mieux encore, ont un templatetag central pour rendre un objet (ou une liste d'objets), qui encapsule la mise en correspondance des types d'objets à templatetags. Ensuite, tous vos modèles se réfèrent simplement à l'un modèle de site, sans aucune connaissance de type nécessaire dans les modèles eux-mêmes. La clé étant que vous êtes en train de déplacer des connaissances sur la façon de rendre des objets individuels hors de vos vues.

Questions connexes