Django, процессоры контекста шаблона
у меня странная проблема, я хочу добавить глобальный запрос с помощью контекстных процессоров. Вот как я это сделал после:
сделал a processor.py в моем приложении как таковом:
from myproject.myapp.models import Foo
def foos(request):
return {'foos': Foo.objects.all()}
и в конце моего setting.py я добавил Это:
TEMPLATE_CONTEXT_PROCESSORS = ('myapp.processor.foos',)
наконец, я передаю свою точку зрения следующим образом:
def index_view(request):
return render_to_response('index.html', {}, context_instance=RequestContext(request))
и по моему указателю.html шаблон:
<select id="select_foo">
{% for foo in foos %}
<option value="/{{ foo.slug }}">{{ foo.name }}</option>
{% endfor %}
</select>
и, наконец, мой url:
(r'^$', 'myapp.views.index_view'),
мой foos дисплей без каких-либо проблема, однако мой media_url и другие контексты ушли. В чем может быть проблема
3 ответа:
при указании этого:
TEMPLATE_CONTEXT_PROCESSORS = ('myapp.processor.foos',)
в файле настроек вы переопределяете Django's контекстные процессоры по умолчанию. Для того, чтобы расширения список, вы должны включить те, которые по умолчанию в настройках:
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", )
обратите внимание, что настройки выше являются значениями по умолчанию (плюс ваш процессор) для django 1.1.
необходимо добавить значения по умолчанию TEMPLATE_CONTEXT_PROCESSORS. Однако вместо жесткого кодирования этих значений, которые будут привязаны к конкретной версии Django, вы можете добавить свой контекстный процессор к значениям по умолчанию следующим образом:
from django.conf import global_settings TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + ( "myapp.processor.foos", )
обязательно включите конечную запятую в кортеж, чтобы Python распознал его как кортеж.
вот что работало у меня для 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", )