在 Javascript / jQuery 中无法检索 Django 模板变量值

Posted

技术标签:

【中文标题】在 Javascript / jQuery 中无法检索 Django 模板变量值【英文标题】:Django Template Variable Value Not Retrievable in Javascript / jQuery 【发布时间】:2012-01-23 13:03:19 【问题描述】:

当我做这样的事情时:

$("#show").click(function()
   % for p in collection %            
      options.push(
            'href'  : ' p.id ',
      );
   % endfor %
);

我可以检索 Django 模板变量的值。

但是,当我尝试做其他部分时:

$('[name=test]').live('click', function() 
alert(' current_state ');   
    var msg = '<div class="userName">  current_user  </div>';
    alert('Message' + msg);

);

我无法从中检索 Django 模板变量的值。

这里出了什么问题?我有时在 javasript / jQuery 中检索 Django 模板变量时遇到了这个问题。

编辑

当我在其他所有内容之上执行以下行时,整个 javasript 都不起作用。知道为什么吗?

 $('body').data('current_user_id',  current_user_id );
 $('body').data('current_user',  current_user );

【问题讨论】:

这两个代码是否来自同一个文件? 不是来自同一个文件。 【参考方案1】:

通常,JS 文件是完全静态的,因此,您不能将 Django 变量插入其中——它不会那样工作。

您可以采取的一种方法是让 Django 将 JS 所需的变量“存放”在您呈现的 html 模板中,然后您可以根据需要在 JS 代码中获取它们并使用它们

例如,在您的示例中使用 javascript 的模板中,添加:

<script type="text/javascript">
  // attach variables from Django to the body node of the document
  $('body').data('current_state', current_state);
  $('body').data('current_user', current_user);
</script>

然后在你的 JS 中,从数据映射中拉取值:

$('[name=test]').live('click', function() 
    alert($('body').data('current_state'));   
    var msg = '<div class="userName">' + $('body').data('current_user') + '</div>';
    alert('Message' + msg);
);

如果你不知道 $.data(),read this

【讨论】:

我已经编辑了我的问题。你知道出了什么问题吗?我已经阅读了文档,语法确实是正确的。 所以,我假设你的 JS 在模板文件中是内联的;鉴于此,检查哪些变量正在传递给模板。确定传入的是 current_user 和 current_state 吗? 是的。我试图在 DOM 元素上显示这些变量值。这就是为什么我很困惑 javascript 如何与我提到的那些模板变量一起工作,第一个代码 sn-p 工作正常。 您的浏览器控制台说什么?您的文档中是否有 标签,如果没有,请添加一个或将其更改为 $(document).data(........) 您好,我已将我的答案发布为我发现的确切问题。不管怎么说,还是要谢谢你。感谢您的帮助,这对将来的使用肯定有帮助。 :)【参考方案2】:

我已经弄清楚出了什么问题。这是因为使用了 Ajax 负载。因此,当主页面请求将页面加载到带有 Ajax 加载的标签中时,Django 模板变量只能从子页面显示,但 javascript 是在主页面中编写的。

因此,要解决这个问题,必须将模板变量传递到主页面而不是子页面。

【讨论】:

【参考方案3】:

您的方法也对我有用,但是我在加载我的 jQuery 库的同一页面中访问变量。 在我看来:

from myapp.models import MyModel
from django.views.generic import TemplateView

class HomeView(TemplateView):
    template_name = 'base.html'
    def get_context_data(self, **kwargs):        
        rows = MyModel.objects.filter(title_slug='titleslug')
        context = super(HomeView, self).get_context_data(**kwargs)
        context['myvariables'] = []
        for row in rows
            context['myvariables'].append(row.somefieldval)
        return context

在我的模板中:

<script>
    options = []
   % for var in myvariables %
       imagesurls.push('var|safel');
   % endfor %
   alert(options);
</script>

【讨论】:

以上是关于在 Javascript / jQuery 中无法检索 Django 模板变量值的主要内容,如果未能解决你的问题,请参考以下文章

在 JQUERY 中使用事件时,我无法像使用 JavaScript Pure 那样进行更改。改变()方法

使用 JavaScript / JQuery 将 html 表数据导出到 Excel 在 Chrome 浏览器中无法正常工作

无法让javascript和Jquery在functions.php中工作

无法使用Javascript或JQuery修剪对象属性

我无法在 iOs 上使用任何 javascript (jQuery)

A HREF 中的 JavaScript 使 jQuery 函数无法工作