0

HTML ファイルに選択タグがあります。ユーザーが自分の選択を変更したときに、ajax を使用する必要があるページが、ユーザーの選択の値を views.py 関数に送信し、この値でページを再作成します。私のhtmlコード:

<div id="response>
    <select name="page_length_name" id="page_length_id">
        <option id="opt1">10</option>
        <option id="opt2">20</option>
        <option id="opt3">30</option>
        <option id="opt4">40</option>
    </select>
     //here is a table
</div>

(この選択タグは形式ではありません)。ユーザーがデータを変更するまで修正してほしい。だから私はクッキーを使わなければならないと思う。selectがフォームにないのに、このような関数を使用できるかどうかわかりませんか?「POST」メソッドにする必要がありますか?投稿はフォームでのみ使用できますか? はいの場合、データ(選択タグ)をサーバーに送信するにはどうすればよいですか?

$(function() {
                $('#page_length_id').change(function() {
                temp = ["page_length_id"].options[selectedIndex].value;
                $.ajax({
                    type: "POST",
                    data: temp,
                    url: 'backup/',
                    success: function(data) {
                        alert("success");
                        $("#response").html(data);
                    }
                });
            })

また、この選択値をクッキーに強制するにはどうすればよいですか? views.py のこのコード行だけで十分ですか?:

table_length = request.COOKIES.get('table_length')

ここに私のviews.pyがあります:

def backup(request):
    if request.is_ajax():
        try:
            table_length = request.COOKIES.get('table_length')
        except Exception:
            table_length = 10
        if not page_length:
            table_length = 10 
        //here i create the page with xsl and send it to a page to be shown 
        result = style.applyStylesheet(doc)
        out = style.saveResultToString( result )
        ok =  mark_safe(out)
        style.freeStylesheet()
        doc.freeDoc()
        result.freeDoc()
        if request.method == 'POST': 
            return HttpResponse(ok)
        else:
            return render_to_response("show.html", {
                'str': ok,
                }, context_instance=RequestContext(request))

ありがとうございました。

4

1 に答える 1

3

ajaxの問題については、簡単に使用できます

  $.ajax({
    type:"POT",
    url :....,
    data:{
        .......
        'csrfmiddlewaretoken': $("{% csrf_token %}").find("input").attr("value"),
    },    
    dataType:"html",
    error:function(data){},
    success:function(data){
      ....
    },
  });

しかし、あなたは置く必要があります

<input type="hidden" id="csrf_token" value="{{csrf_token}}"/> 

あなたのhtmlで

フォームでデータを送信する場合は、csrf も使用する必要があります

<form action="/contact/" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>

https://docs.djangoproject.com/en/dev/topics/forms/

于 2012-09-26T11:00:33.587 に答える