在Jquery代码中修改Django模板变量
我有一个Django模板,在里面我检查一个变量是TRUE还是FALSE。现在在Jquery的某个特定事件中,我想修改这个Django变量的值,让它变成TRUE或FALSE。
在views.py文件中
var = True
在模板中
{% if var %}
do something
{% endif %}
HTML代码
<form>
<label for="target">Enter Key:</label>
<input id="target" type="text" />
{% if var %}
dispaly other stuff
{% endif %}
</form>
Jquery代码
<script>
$('#target').keydown(function(event) {
if ($(this).val() == '00000 )
{
jvar = {{var}}
}
});
我想在Jquery的特定事件中改变'var'的值
我该怎么做呢?
提前谢谢你!
2 个回答
0
你不能用jQuery来修改Django模板。当jQuery开始工作时,页面已经被渲染成HTML了,Django的模板标签也已经处理过了。不过,你可以通过ajax请求重新渲染你的模板,或者(我觉得在这种情况下这样做就够了)用CSS来显示或隐藏一些部分:
<form>
<label for="target">Enter Key:</label>
<input id="target" type="text" />
<div id="hiddencontent" style="display:{% if var %}block{%else%}none{% endif %}
dispaly other stuff
</div>
</form>
Jquery
<script>
$('#target').keydown(function(event) {
if ($(this).val() == '00000' )
{
$('hiddencontent').show();
}
});
不过,这样的话HTML的内容是可以被查看的(如果你查看源代码的话)。
如果'0000'是个密码,这可能不是最好的解决办法,但如果真的是,你还是得在服务器端检查一下。否则有人可以打开HTML源代码看到密码。我觉得最好的办法是了解一下Django表单是怎么工作的。我在下面提供了一个链接:
http://agiliq.com/blog/2010/01/doing-things-with-django-forms/
5
如果我理解你的问题没错的话,你是无法做到的。
模板变量是在服务器上处理的,而jQuery是在客户端运行的。
所以你不能直接修改模板,但你可以在浏览器中修改生成的HTML。可以使用像Firefox的Firebug这样的工具来查看HTML,你会发现没有django模板的痕迹。
当你的模板中的HTML/JavaScript代码到达浏览器时,jvar = {{var}}
会变成类似jvar = 4325
这样的形式。
只需打开Firebug控制台,测试一下JavaScript/jQuery的表达式就可以了。
<script type="text/javascript">
$('document').ready(function(){
$('#some_element_id').click(function(ev) {
jvar = 1;
$('#some_content').show();
$('#some_other_content').hide();
});
$('#some_other_element_id').click(function(ev) {
jvar = 2;
$('#some_content').hide();
$('#some_other_content').show();
});
});
</script>
...
<div id="some_content">
display some stuff
</div>
<div id="some_other_content">
display some other stuff
</div>