在Jquery代码中修改Django模板变量

1 投票
2 回答
5320 浏览
提问于 2025-04-17 10:57

我有一个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>

撰写回答