2013-06-25 75 views
1

我有一個選擇框,調用更改功能。該功能從「產品」選擇框中查找選定的值。
我想將選定的值扔到我的views.py中,在一些操作返回數據列表並填充目標的選擇框後。
我想爲此使用ajax。請幫忙。如何通過ajax從django模板發送值到視圖?

我的代碼如下所示:

<script type="text/javascript"> 
    function select_value() 
    { 
     var e = document.getElementById("Product"); 
     var prod = e.options[e.selectedIndex].text 
     console.log(prod) 
    } 
</script> 

這是我的選擇框的樣子:

<table> 
    <tr> 
     <td> 
      <select id="Product" onChange="select_value();"> 
       {% for products in product_name_list %} 
        <option>{{products|safe}}</option> 
       {% endfor %} 
      </select> 
     </td> 
     <td> 
      <select id="dest"> 
       {% for des in destinations_name_list %} 
        <option>{{des|safe}}</option> 
       {% endfor %} 
      </select> 
     </td> 
    </tr> 
</table> 

這是我的views.py:

def selection_filter(request,prod): 
    destination_objs = Destination.objects.filter(product=prod) 
    destination_name = destination_objs.values_list('name') 
    destination_name_list = [] 
    for iter_name in destination_name: 
     destination_name_list.append(iter_name[0].encode('utf-8')) 

    return render_to_response('temp/test.html', 
       {"destination_name_list" : destination_name_list}, 
       ) 

回答

1

我認爲這一點你可能會誤解是你的整個頁面的Django模板不會被「神奇地」重新渲染。在Django的標準模型 - 視圖 - 模板範例中,根據最初的請求,模板只呈現一次。你寫的方式,除非有一個默認的產品選擇,你會在第一個渲染中有一個尷尬的空<select>。但是忽略這個...

對於這樣的問題,您需要兩個視圖:一個用於渲染整個頁面,另一個用於提供Ajax響應。對於第二個視圖有兩個主要選項:1)通過腳本post-response返回JSON以供解釋/呈現;或2)返回完全呈現的HTML片段,以便直接插入到DOM中。在這種情況下,我只是選擇2.

我建議尋找Jquery,因爲它使Ajax和DOM操作變得非常簡單。

如果你有jQuery的,這是因爲添加到您的腳本一樣簡單:

$.get('/destinations/' + prod) 
.done(function (html) { 
    $(#dest).html(html); 
}); 

(你可以做同樣的事情,沒有jQuery的太多,但它需要多一點爭吵)

您的test.html文件應包含:

{% for des in destinations_name_list %} 
    <option>{{des|safe}}</option> 
{% endfor %} 
相關問題