1

変更時に関数を呼び出す選択ボックスがあります。この関数は、「製品」選択ボックスから選択された値を見つけます。
その選択した値をviews.pyにスローしたいと思います。これは、いくつかの操作の後にデータのリストを返し、宛先の選択ボックスに入力します。
この目的のために ajax を使用したいと考えています。助けてください。

私のコードは次のようになります。

<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},
                )
4

1 に答える 1

1

あなたが誤解しているかもしれないポイントは、ページ全体の Django テンプレートが「魔法のように」再レンダリングされないということだと思います。Django の標準モデル ビュー テンプレート パラダイムでは、テンプレートは最初の要求時に一度だけレンダリングされます。あなたが書いた方法では、デフォルトの製品選択がない限り<select>、最初のレンダリングでぎこちない空が表示されます. でもそれを無視して…

このような問題の場合、2 つのビューが必要です。1 つはページ全体をレンダリングするためのもので、もう 1 つは Ajax 応答を提供するためのものです。2 番目のビューには 2 つの主なオプションがあります。1) 応答後のスクリプトによる解釈/レンダリング用に JSON を返すか、2) DOM に直接挿入するために完全にレンダリングされた HTML フラグメントを返します。この場合、オプション 2 を選択します。

Ajax と DOM の操作が非常に簡単になるため、Jquery を検討することをお勧めします。

Jquery をお持ちの場合は、スクリプトに追加するのと同じくらい簡単です。

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

(Jquery がなくても同じことができますが、もう少しラングリングが必要です)

ファイルtest.htmlには次が含まれている必要があります。

{% for des in destinations_name_list %}
    <option>{{des|safe}}</option>
{% endfor %}
于 2013-06-25T11:54:20.313 に答える