2013-06-25 114 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 %} 
相关问题