2012-12-12 58 views
1

我一直有這個問題很久。但我無法想象如何做到這一點。有沒有辦法,我們可以使用模板語言的javascript對象。例如,我有在選定小部件上呈現的類別的查詢集。Django:用戶Javascript對象作爲上下文變量

Category: <select name="category" id="id_category"> 
{% for category in categories %} 
<option value="{{category.id}}">{{category.name}}</option> 
{% endfor %} 
</select> 

現在,對於選定的類別,我異步調用服務器以返回相關的產品類型。

$('#id_category').change(function(){ 
    getProductTypes($(this).val()); 

}); 

在ajax函數中,我無法在url模板標記中使用category_id js對象。由於這個原因,我必須對目標網址進行硬編碼。任何人都可以請建議一種方法來處理這個。由於

function getProductTypes(category_id){ 
     //Would like to do this 
      var url = {% url lookup_product_types category_id %} 
     //But end up doing this 
      var url = '/'+category_id+'/product_types/find/' 
       $.ajax({ 
       url:url, 
       data:{category:category_id}, 
       dataType:'json', 
       success: function(data, status, xhr){ 
        html = '<select>'; 
        $.each(data, function(index, value){ 
         html += '<option value='+this.pk+'>'+this.fields.name+'</option>'; 
        }); 
        html += '</select>'; 
        $('#productType').html(html); 
       } 
       }); 

回答

1

如何使用該選項的標籤的data attribute

你會更新您的模板到類似於 -

{% for category in categories %} 
    <option data-url="{% url lookup_product_types category.id %}" value="{{category.id}}">{{category.name}}</option> 
{% endfor %} 

然後沿的線條改變了ajax -

$('#id_category').change(function(){ 
    var url = $(this).find('option:selected').attr('data-url'); 
    getProductTypes($(this).val(), url); 
}); 

function getProductTypes(category_id, url){ 
    $.ajax({ 
     url: url, 
     data:{ category:category_id}, 
     // .. 
+0

這似乎是這樣做的一個很好的方式。謝謝,我會繼續這樣做。 –

+0

沒問題 - 我最近才遇到數據屬性 - 我覺得我一直在尋找它很久了! –

+0

呵呵......我們一般都會想念這個明顯的。再次感謝。 –