пятница, 26 марта 2010 г.

Устанавливаем значение в context навсегда

Собственно что натолкнуло
Самого удивило что значение установленное из Node в context сохраняется в пределах одного блока.

{% extends 'test/base.html' %}

{% load foo %}

{% block content %}
{% set_bar_value %}
{{ bar_value }} == 'BAR'
{% endblock %}

{% block menu %}
{{ bar_value }} == ''
{% endblock %}



Залез в код, оказалось что значение устанавливается в словарь, который после выхода из блока удаляется. Как-то вот так:
Copy Source | Copy HTML
  1. class BlockNode(Node):
  2.     #....
  3.  
  4.     def render(self, context):
  5.         context.push()
  6.         # Save context in case of block.super().
  7.         self.context = context
  8.         context['block'] = self
  9.         result = self.nodelist.render(context)
  10.         context.pop()
  11.         return result

Собственно вставляем свой словарик с нужным значением и значение попадет в глобальный контекст.

Copy Source | Copy HTML
  1. class BarNode(template.Node):
  2.  
  3.     def __init__(self, name):
  4.         self.name = name
  5.  
  6.     def get_value(self):
  7.         return 'BAR'
  8.  
  9.     def render(self, context):
  10.         d = context.pop()
  11.         context.update({self.name: self.get_value()})
  12.         context.update(d)
  13.         return ''
  14.  

0 коммент.:

Отправить комментарий