如何将变量从包含的模板传递到包含它的模板?

时间:2011-04-04 16:17:54

标签: python django django-templates

在Django视图中: -

if request.is_ajax():
    t = get_template('bar-templates.html')
    html = t.render(Context({'edit': True, 'user':'some-user' }))
    return HttpResponse(html)

有两个模板: 主模板(foo-templates.html),其中包含模板(bar-templates.html)。在上下文edituser传递给bar-templates.html但此变量也用于foo-templates.html。在django,我们习惯{{ edit }}来捕捉变量。由于此变量出现在bar-templates.html中。我如何将其用于foo-templates.html

FOO-templates.html:

{% extends "base.html" %}

<div class="container">
{{ edit }} // Here I am not getting the edit value
    {% if edit %} // I need this edit value. But this value is in context with `bar-templates.html`
     do something 
    {% else %}
     do something
    {% endif %}
    <div class="content">
       {% include "bar-templates.html" %}
    </div>

杆templaes.html

{{edit}} //这里它给了我编辑值     这是我从视图发送的模板。

如何将included template变量值用于包含它的模板。

2 个答案:

答案 0 :(得分:1)

使用您应编辑的其他帖子中的详细信息以包含在此帖子中:

据我所知,您正在尝试在侧边栏菜单中添加“选定”类。这对您不起作用,因为正如gcbirzan所说,您无法将ajax响应的上下文放入基本模板中。最重要的是,你不会重新渲染基本模板,因此它不会改变。

使用javascript,您可以从part.html中提取foo_id。由于该代码未显示,假设您将foo_id保存在隐藏的div中,<div id="foo_id" style="display:none;">foo_2</div>

现在您可以将ajax函数更改为以下内容:

$.ajax({
    type:'GET',
    cache: 'false',
    url:"/foobar/",
    success:function(data) {
        $('#main-content').html(data);
        var $foo_id = $('#foo_id').val();
        $('#foo1>ul>li.selected').removeClass('selected');
        $('#'+ foo_id).addClass('selected');
    }

});

答案 1 :(得分:0)

如果您只是渲染foo:

t = get_template('foo-templates.html')
html = t.render(Context({'edit': True, 'user':'some-user' }))

然后'foo'和包含的'bar'都具有相同的'edit'值。

我不完全理解你的问题,但我已经回答了吗?