簡體   English   中英

無法在Javascript / jQuery中檢索Django模板變量值

[英]Django Template Variable Value Not Retrievable in Javascript / jQuery

當我做這樣的事情時:

$("#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 }});

通常,JS文件是完全靜態的,因此,您不能在其中插入Django變量-它不能那樣工作。

您可以采取的一種方法是讓Django在已呈現的HTML模板中“停放” JS所需的變量,然后您可以按需獲取它們並在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(), 請閱讀此內容

您的方法也對我有用,但是我正在加載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>

我已經知道出了什么問題。 這是因為使用了Ajax負載。 因此,當主頁請求將頁面加載到帶有Ajax加載的標記中時,Django模板變量只能從子頁面顯示,但是javascript是寫在主頁中的。

因此,要解決此問題,必須將模板變量傳遞到主頁而不是子頁面中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM