2011-12-19 31 views
2

當我做了這樣的事情:Django的模板變量值無法找回在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 }}); 
+0

都來自同一個文件中的代碼片段? – yilmazhuseyin 2011-12-19 11:39:04

+0

不是來自同一個文件。 – MrCooL 2011-12-19 17:31:00

回答

0

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

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

6

通常情況下,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); 
}); 

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

+0

我編輯了我的問題。你知道哪裏出了問題嗎?我讀過文檔,語法確實正確。 – MrCooL 2011-12-19 17:27:32

+0

所以,我假設你的JS在模板文件中內聯;鑑於此,請檢查傳遞給模板的變量。你確定current_user和current_state被傳入嗎? – 2011-12-19 17:46:13

+0

是的。我試圖在DOM元素上顯示這些變量值。這就是爲什麼我很困惑,正如我提到的那樣,javascript如何處理這些模板變量,第一個代碼片段工作正常。 – MrCooL 2011-12-19 18:12:56

0

你的方法也適用於我,但是我正在訪問我的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>