2010-05-09 6 views
0

Dites que j'écris une application Django et que tous les modèles de l'application nécessitent une certaine variable. La manière "classique" de faire face à ceci, afaik, est d'écrire un processeur de contexte et de l'ajouter à TEMPLATE_CONTEXT_PROCESSORS dans le settings.py.Comment ajouter un processeur de contexte à partir d'une application Django

Ma question est, est-ce la bonne façon de le faire, étant donné que les applications sont censées être «indépendantes» du projet réel qui les utilise? En d'autres termes, lorsque vous déployez cette application sur un nouveau projet, y a-t-il un moyen d'éviter que le projet doive explicitement jouer avec ses paramètres?

Répondre

1

Votre hypothèse que les applications peuvent simplement être ajoutées dans un projet sans toucher les paramètres du projet n'est pas correct.

Si vous ajoutez une application à un projet, vous devez modifier les paramètres, puisque vous devez l'ajouter dans le tuple INSTALLED_APPS. Alors, pourquoi ne pas éditer la liste des processeurs de contexte?

+0

Oui. Si votre inquiétude est que vous ne voulez pas passer ce fardeau supplémentaire sur les applications, alors je dis ne vous inquiétez pas à ce sujet. Je suis déjà habitué à la modification de mes paramètres INSTALLED_APPS et CONTEXT_PROCESSORS selon les besoins des applications. – Koobz

+0

Est-ce que ce sont les deux seules choses à éditer? Parce que je me suis rendu compte il y a un moment que vous devez vous assurer que votre dossier static_media contient le support statique de l'application. En d'autres termes, nous parlons de 3 "actions" différentes que vous devez vous rappeler de prendre lorsque vous déplacez l'application. J'imagine que j'essaie simplement d'obtenir plus d'applications que ce qu'elles sont censées faire. –

+0

Le middleware est un autre paramètre supplémentaire courant pour les applications. Dans le grand ordre des choses, l'édition d'une poignée de lignes dans les URL et les paramètres est mineure en termes de gains fonctionnels que vous obtenez des applications modulaires. – digitaldreamer

0

Oui, l'ajout d'un processeur de contexte est l'approche la plus recommandée pour y parvenir.

1

Les processeurs de contexte sont très utiles et je ne serais pas trop timide pour les utiliser, mais dans certains cas cela n'a pas de sens.

Cette technique est utilisée lorsque j'ai besoin d'ajouter quelque chose de simple à toutes les vues d'une application. Je ne peux pas certifier que c'est la bonne façon de faire les choses, mais cela fonctionne pour notre équipe:

Je vais déclarer un dictionnaire global template_vars en haut du fichier. Chaque vue ajoute ses propres variables à ce dictionnaire et les transmet au modèle, et renvoie template_vars dans le raccourci render_to_response.

Il ressemble à ceci:

template_vars = { 
    'spam': 'eggs', 
    } 

def gallery(request): 
    """ 
    portfolio gallery 
    """ 

    template_vars['projects'] = Projects.objects.all() 
    return render_to_response('portfolio/gallery.html', template_vars, context_instance=RequestContext(request)) 
Questions connexes