【发布时间】:2011-08-08 19:17:33
【问题描述】:
我有以下几点:
return render_to_response('a.html', {'b': 3}, context_instance=...)
在a.html:
{{ b }}
输出 3
{% url app.views.something b %}
给我:
/something/3/
但是
<script type="text/javascript">
$(document).ready(function() {
alert('{{ b }}');
});
</script>
弹出一个带有 3 的警报对话框。但是如果您查看源代码:
<script type="text/javascript">
$(document).ready(function() {
alert('0');
});
</script>
如果我尝试在 jquery 的其他任何地方使用 {{ b }},它只会不断返回“0”。
如果我执行以下操作并在弹出窗口到达之前检查源,也会发生同样的情况
<script type="text/javascript">
setTimeout("alert('{{ b }}')",2000);
<script>
弹出窗口显示“3”,但源显示“0”。
以前有人遇到过这种情况吗?
编辑:
我使用 HTTP fox 推断这是一个 AJAX 问题。 Django 正在向浏览器返回“3”。
虽然我在上面提供的示例代码过于简化。我基本上在做的是使用 jquery ajax 命令刷新代码所在的 div(content_ct 的父级)。
$('#ctSelection').change(function() {
if($('#ctSelection option:selected').val()=='1') {
$.get('/company/ct/1/', function(data) {
$('#content_ct').parent().html(data);
});
}
if($('#ctSelection option:selected').val()=='2') {
$.get('/company/ct/2/', function(data) {
$('#content_ct').parent().html(data);
});
}
});
编辑
我相信这是由于 jquery 重叠处理程序并且总是使用堆栈中的第一个处理程序
【问题讨论】:
-
嗨。您的脚本标签在 a.html 中吗?还是它们在单独的 .js 文件中?
-
嗯。这很奇怪。如果你这样做会发生什么: var b = '{{ b }}'; ?
-
我这样做了,然后
alert'ed 输出和输出是'3',但var b在源中是'0' -
这很奇怪!我对此没有任何解释。我在许多项目中以完全相同的方式为服务器端值创建了变量。我不确定是什么导致您的模板表现得那样。
-
如果警报显示 3,那么问题出在您获取源代码的方式上。你是怎么得到它的?
标签: javascript jquery django django-templates