可能重复:
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.html
。 main.html
包括part.html
但{{ foo_id }}
中的main.html
并没有给我任何价值。我通过???
表示了位置但是当我渲染整个模板时(不添加html)
div中的数据然后它给出了正确的数据。
jquery的
$.ajax({
type:'GET',
cache: 'false',
url:"/foobar/",
success:function(data) {
$('#main-content').html(data);
}
});
答案 0 :(得分:0)
我真的不明白你的问题。我假设您的意思是您希望可以从AJAX请求响应中访问foo_id,但这是不可能的,因为在发出AJAX请求之前呈现页面(以及上下文集),因此part.html只是django的模板,它使用主模板的上下文来呈现整个页面。您需要根据响应,JavaScript,或修复视图手动更改foo_id(从ajax视图和主视图调用相同的函数以获取foo_id)
让我对你的问题感到困惑的是:
但是当我渲染整个模板(不在div中添加html数据)时,它会提供正确的数据。
,如果你不包括part.html,我读作foo_id被设置,所以很抱歉,如果是这样的话(即使它对我来说没有意义......)。