包含模板不会呈现变量值

时间:2011-04-04 23:38:56

标签: jquery python ajax django

  

可能重复:
  how to pass the variable from included template to the template where it is included?

main.html中

{% extends "new-base.html" %}
{% block side-bar %}
<div id="foo1">
     {% for foo in foo_list %}
     {{ foo_id }} // ???
         {% ifequal foo.id foo_id %}
          <li id="my-id_{{ foo.id }}" class="select"><a href="#.">
         {% else %}
          <li id="my-id_{{ foo.id }}" class="no-select"><a href="#.">
         {% endifequal %}
      {% endif %}
     {% endfor %}
    </ul>
  </div>
{% endblock side-bar %}

{% block content %}
<div class="content" id="main-content">
 {% include "template/part.html" %}
</div>
{% endblock content %}

part.html

此html包含在main.html

views.py

if request.is_ajax():
    t = get_template('part.html')
    html = t.render(Context({'foo_id': foo_id}))
    return HttpResponse(html)

作为回应,它会发送part.html但我将foo_id用于main.htmlmain.html 包括part.html{{ foo_id }}中的main.html并没有给我任何价值。我通过???表示了位置但是当我渲染整个模板时(不添加html) div中的数据然后它给出了正确的数据。

jquery的

$.ajax({
    type:'GET',
    cache: 'false',
    url:"/foobar/",
    success:function(data) {
        $('#main-content').html(data);
    }
});

1 个答案:

答案 0 :(得分:0)

我真的不明白你的问题。我假设您的意思是您希望可以从AJAX请求响应中访问foo_id,但这是不可能的,因为在发出AJAX请求之前呈现页面(以及上下文集),因此part.html只是django的模板,它使用主模板的上下文来呈现整个页面。您需要根据响应,JavaScript,或修复视图手动更改foo_id(从ajax视图和主视图调用相同的函数以获取foo_id)

让我对你的问题感到困惑的是:

  

但是当我渲染整个模板(不在div中添加html数据)时,它会提供正确的数据。

,如果你不包括part.html,我读作foo_id被设置,所以很抱歉,如果是这样的话(即使它对我来说没有意义......)。