【问题标题】:Modify django template variable in Jquery code在 Jquery 代码中修改 django 模板变量
【发布时间】:2012-02-17 11:08:22
【问题描述】:

我有 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' 的值

我怎样才能做到这一点?

提前致谢

【问题讨论】:

  • Jquery 接触到的任何东西都会被渲染。 {% if var %} 不应出现在结果呈现的 html 中。
  • Javascript 是一种客户端语言。 HTML 由 python 渲染,然后运行 ​​javascript - 它没有 django 模板变量的概念。你想让它做什么?

标签: jquery python django django-templates


【解决方案1】:

如果我正确理解你的问题,你就不能。

模板变量在服务器端,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>

【讨论】:

    【解决方案2】:

    您不能使用 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 Forms 的工作原理。我在下面提供了一个链接:

    http://agiliq.com/blog/2010/01/doing-things-with-django-forms/

    【讨论】:

      猜你喜欢
      • 2019-03-05
      • 2015-11-02
      • 2017-04-16
      • 1970-01-01
      • 1970-01-01
      • 2017-02-18
      • 1970-01-01
      • 2016-04-24
      • 1970-01-01
      相关资源
      最近更新 更多