Самого удивило что значение установленное из 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
- class BlockNode(Node):
- #....
- def render(self, context):
- context.push()
- # Save context in case of block.super().
- self.context = context
- context['block'] = self
- result = self.nodelist.render(context)
- context.pop()
- return result
Собственно вставляем свой словарик с нужным значением и значение попадет в глобальный контекст.
Copy Source | Copy HTML
- class BarNode(template.Node):
- def __init__(self, name):
- self.name = name
- def get_value(self):
- return 'BAR'
- def render(self, context):
- d = context.pop()
- context.update({self.name: self.get_value()})
- context.update(d)
- return ''
0 коммент.:
Отправить комментарий