urls template examples example based django views django-context

template - render django



creando mi propio procesador de contexto en django (4)

De acuerdo con los documentos de django , puede usar render como acceso directo en lugar de render_to_response con el argumento context_instance:

Alternativamente, use el acceso directo de render() que es lo mismo que una llamada a render_to_response () con un argumento de instancia de contexto que obliga al uso de un RequestContext.

He llegado a un punto en el que necesito pasar ciertas variables a todas mis vistas (en su mayoría variables de tipo de autenticación personalizada).

Me dijeron que escribir mi propio procesador de contexto era la mejor manera de hacerlo, pero tengo algunos problemas.

Mi archivo de configuración se ve así

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.contrib.messages.context_processors.messages", "sandbox.context_processors.say_hello", )

Como puede ver, tengo un módulo llamado ''procesadores_contexto'' y una función dentro de eso llamado ''say_hello''.

Que parece

def say_hello(request): return { ''say_hello'':"Hello", }

¿Tengo razón al suponer que ahora puedo hacer lo siguiente dentro de mis puntos de vista?

{{ say_hello }}

En este momento, esto se convierte en nada en mi plantilla.

Mi vista se ve como

from django.shortcuts import render_to_response def test(request): return render_to_response("test.html")


Desde Django 1.8 registras tus procesadores de contexto personalizados como este:

TEMPLATES = [ { ''BACKEND'': ''django.template.backends.django.DjangoTemplates'', ''DIRS'': [ ''templates'' ], ''APP_DIRS'': True, ''OPTIONS'': { ''context_processors'': [ ''django.template.context_processors.debug'', ''django.template.context_processors.request'', ''django.contrib.auth.context_processors.auth'', ''django.contrib.messages.context_processors.messages'', ''www.context_processors.instance'', ], }, }, ]

asumiendo que su procesador de contexto está en la aplicación www en context_processors.py


El procesador de contexto que ha escrito debería funcionar. El problema está en su opinión.

¿Está seguro de que su vista se está representando con RequestContext ?

Por ejemplo:

def test_view(request): return render_to_response(''template.html'')

La vista anterior no utilizará los procesadores de contexto enumerados en TEMPLATE_CONTEXT_PROCESSORS . Asegúrese de que está proporcionando un RequestContext así:

def test_view(request): return render_to_response(''template.html'', context_instance=RequestContext(request))


Si está utilizando el render_to_response() abreviado render_to_response() Django para render_to_response() una plantilla con el contenido de un diccionario, su plantilla pasará una instancia de Contexto de manera predeterminada (no un RequestContext ). Para usar un RequestContext en la representación de su plantilla, use el acceso directo render() que es lo mismo que una llamada a render_to_response() con un argumento context_instance que obliga al uso de un RequestContext .