python - safe - Django, procesadores de contexto de plantilla
linebreaksbr django (3)
Aquí lo que funcionó para mí para 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", )
Tengo un problema extraño, quiero agregar una consulta global utilizando procesadores de contexto. Así es como lo hice following :
hice un processor.py en mi aplicación como tal:
from myproject.myapp.models import Foo
def foos(request):
return {''foos'': Foo.objects.all()}
y al final de mi configuración.py he agregado esto:
TEMPLATE_CONTEXT_PROCESSORS = (''myapp.processor.foos'',)
Por último, paso mi opinión así:
def index_view(request):
return render_to_response(''index.html'', {}, context_instance=RequestContext(request))
y en mi plantilla index.html:
<select id="select_foo">
{% for foo in foos %}
<option value="/{{ foo.slug }}">{{ foo.name }}</option>
{% endfor %}
</select>
Y finalmente mi url:
(r''^$'', ''myapp.views.index_view''),
Mi foos se muestra sin ningún problema, sin embargo mi media_url y otros contextos se han ido. Cuál puede ser el problema
Cuando especifica esto:
TEMPLATE_CONTEXT_PROCESSORS = (''myapp.processor.foos'',)
En su archivo de configuración, está anulando los procesadores de contexto predeterminados de Django. Para extender la lista, debe incluir las predeterminadas en su configuración:
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",
)
Tenga en cuenta que las configuraciones anteriores son las predeterminadas (más su procesador) para django 1.1.
Necesita agregar los valores predeterminados de TEMPLATE_CONTEXT_PROCESSORS. Sin embargo, en lugar de codificar esos valores, que se vincularán a una versión específica de Django, puede agregar su procesador de contexto a los valores predeterminados de la siguiente manera:
from django.conf import global_settings
TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + (
"myapp.processor.foos",
)
Asegúrese de incluir la coma final en la tupla, para que Python lo reconozca como una tupla.