J'ai un problème étrange, je veux ajouter une requête globale à l'aide de processeurs de contexte. Voici comment je l'ai fait en suivant :
fait un processor.py dans mon application en tant que tel:
from myproject.myapp.models import Foo
def foos(request):
return {'foos': Foo.objects.all()}
et à la fin de mon setting.py j'ai ajouté ceci:
TEMPLATE_CONTEXT_PROCESSORS = ('myapp.processor.foos',)
Enfin, je passe mon avis comme suit:
def index_view(request):
return render_to_response('index.html', {}, context_instance=RequestContext(request))
et sur mon modèle index.html:
<select id="select_foo">
{% for foo in foos %}
<option value="/{{ foo.slug }}">{{ foo.name }}</option>
{% endfor %}
</select>
Et enfin mon URL:
(r'^$', 'myapp.views.index_view'),
Mes foos s'affichent sans aucun problème, mais mon media_url et d'autres contextes ont disparu. Quel peut être le problème
Lorsque vous spécifiez ceci:
TEMPLATE_CONTEXT_PROCESSORS = ('myapp.processor.foos',)
Dans votre fichier de paramètres, vous remplacez les Django's processeurs de contexte par défaut . Pour étendre la liste, vous devez inclure ceux par défaut dans vos paramètres:
TEMPLATE_CONTEXT_PROCESSORS = (
"Django.core.context_processors.auth",
"Django.core.context_processors.debug",
"Django.core.context_processors.i18n",
"Django.core.context_processors.media",
"myapp.processor.foos",
)
Remarque, les paramètres ci-dessus sont les valeurs par défaut (plus votre processeur) pour Django 1.1.
Vous devez ajouter les valeurs par défaut de TEMPLATE_CONTEXT_PROCESSORS. Cependant, au lieu de coder en dur ces valeurs, qui seront liées à une version spécifique de Django, vous pouvez ajouter votre processeur de contexte aux valeurs par défaut comme suit:
from Django.conf import global_settings
TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + (
"myapp.processor.foos",
)
Assurez-vous d'inclure la virgule de fin dans le tuple, afin que Python le reconnaisse comme un tuple.
Voici ce qui a fonctionné pour moi pour Django 1.3
TEMPLATE_CONTEXT_PROCESSORS = (
"Django.contrib.auth.context_processors.auth",
"Django.core.context_processors.debug",
"Django.core.context_processors.i18n",
"Django.core.context_processors.media",
"Django.core.context_processors.static",
"Django.contrib.messages.context_processors.messages",
"myapp.processor.foos", )