¿Cómo paso las variables a todas las plantillas en django?

Estoy tratando de pasar variables (variable de navegador) a todas mis plantillas en mi aplicación. ¿Algún consejo sobre cómo hacer que funcione?

Ver:

def browser(request): primary_cat_list = Categories.objects.order_by("category") subcat_list = SubCategories.objects.order_by("sub_category") product = Productbackup.objects.order_by("website") browser = list(chain(primary_cat_list, subcat_list, product)) return render_to_response('reserve/templates/base.html', locals(), context_instance=RequestContext(request)) 

Modelo:

 {% for prod in browser %} {{ prod }}, {% endfor %} 

    Tú, amigo mío, estás en el mercado de procesadores de contexto.

    De una entrada de blog escrita por un escritor técnico mucho más ágil y erudito que yo:

    ¿Qué son los procesadores de contexto de plantilla?

    Los procesadores de contexto de Django son una instalación que le permite proporcionar datos y devoluciones de llamadas a sus plantillas.

    Puedes hacerlo de una de dos maneras:

    • Sobre una base de solicitud individual: pasando un valor de Context personalizado a su llamada render_to_response()
    • Globalmente: al crear un método de procesador de contexto que acepta un objeto HttpRequest como entrada, y devuelve una carga útil o callback, luego registra el procesador de contexto en tu settings.py , luego proporciona a tu llamada render_to_response() el atributo incorporado de RequestContext en lugar de el suyo propio (siempre puede extender RequestContext para agregar más datos en una base de solicitud individual, por supuesto).

    Si ese enfoque para pasar datos a las plantillas le suena absurdo y confuso, no está solo. La complejidad involucrada en una operación tan simple es injustificada y contraproducente, pero cada sistema tiene sus defectos.

    La documentación oficial está aquí:

    https://docs.djangoproject.com/en/dev/ref/templates/api/

    Así que, pero sí, he estado progtwigndo con Django por un tiempo, y una de las razones por las que realmente me gusta resolver problemas es porque es casi bizantino en su complejidad, pero no de una manera dominante. Tiene una tonelada de geegaws y garabatos que pueden no parecer útiles de inmediato; Cada uno de estos es extremadamente útil cuando lo necesita, y si no lo hace, se mantendrá fuera de su camino.

    El resultado aquí para usted es: los procesadores de contexto son un buen ejemplo de ellos. Sí.

    Actualmente estás pasando a locals() como el ámbito variable que también debería incluir el browser , pero me parece que el uso de locals() muy feo.

    Personalmente siempre prefiero un patrón como este en su lugar:

     def browser(request): context = RequestContext(request) primary_cat_list = Categories.objects.order_by("category") subcat_list = SubCategories.objects.order_by("sub_category") product = Productbackup.objects.order_by("website") browser = list(chain(primary_cat_list, subcat_list, product)) context['browser'] = browser return render_to_response('reserve/templates/base.html', context_instance=context) 

    Puedo darte un ejemplo de mi código, que funciona bien:

    Aquí está el archivo llamado context_processors.py

    context_processors.py

     def base(request): user = request.user #====================== #Login form #===================== # here is the code for login user or check if he is logged in already return { 'user': user, } 

    y eso es parte de mi base.html (una plantilla que uso para todas mis páginas)

    base.html

     {% if user.username %} 

    Welcome {{ user.username }}