スポンサーサイト

0

    一定期間更新がないため広告を表示しています


    • 2014.12.23 Tuesday
    • -
    • -
    • -
    • -
    • -
    • by スポンサードリンク

    フォームから送信した値とrequest.POSTの挙動($_POST@PHPとの比較)

    0
      djangoのrequest.POSTの挙動について。
      マニュアルにphpの$_POST変数に影響されてできた機能だと書いてありますが、ちょっと違う点があったので注意。

      <input type="checkbox" name="test" value="hoge" checked="checked" />
      <input type="checkbox" name="test" value="hage" checked="checked" />
      <input type="checkbox" name="test" value="mage" checked="checked" />

      と書いてsubmitすると、request.POST['test']には['hoge','hage','mage'](pythonのリスト)が入るようです。
      確かPHPだと上書きされちゃって一番下のmageだけ出てきたような記憶が。

      今度は

      <input type="checkbox" name="test[]" value="hoge" checked="checked" />
      <input type="checkbox" name="test[]" value="hage" checked="checked" />
      <input type="checkbox" name="test[]" value="mage" checked="checked" />

      と書いてsubmitしてみた。
      request.POSTの中身は…
      request.POST['test[]']に['hoge','hage'.'mage']が入ってました(汗
      PHPだと、自動的に$_POST['test']=array(0=>'hoge',1=>'hage',2=>'mage')みたいになるので、それ自体をループすることができますが、djangoのrequest.POSTではできない模様。
      さて困った。

      更に、

      <input type="checkbox" name="test[0]" value="hoge" checked="checked" />
      <input type="checkbox" name="test[1]" value="hage" checked="checked" />
      <input type="checkbox" name="test[2]" value="mage" checked="checked" />

      と書いてsubmit。
      予想通り(?)、
      request.POST['test[0]']='hoge'
      request.POST['test[1]']='hage'
      request.POST['test[2]']='mage'
      でした。うーん、困った。

      全てのチェックボックスをname="test"にして、viewではfor v in request.POST['test']:で廻すしかないかな?
      #ManyToManyのadminインターフェイスをcheckboxにしてくれ!というticket(とっくにclosed)が本家にあったと思うんだけど、djangoの中の人からの回答は「checkboxは真偽(bool)を表すためのもんだ!文句あっか?!」という感じだった。文化の差なのか…??


      スポンサーサイト

      0

        • 2014.12.23 Tuesday
        • -
        • 16:03
        • -
        • -
        • -
        • -
        • by スポンサードリンク

        コメント
        Djangoの場合は上書きされずに一番最後のものが出るはずです。

        同じフォームでテスト
        views.py
        def hello2(request):
          print "type: ", type(request.POST)
          if request.POST.has_key("text"):
            print 'request.POST["text"] : ', request.POST["text"]
            print 'request.POST.getlist("text") : ', request.POST.getlist("text")
            print 'request.POST.lists() : ', request.POST.lists()
          t = loader.get_template("hello2.html")
          c = Context({"hoge":"hoge"})
        return HttpResponse(t.render(c))

        ターミナル:
        type: <class 'django.http.QueryDict'>
        request.POST["text"] : mage
        request.POST.getlist("text") : ['hoge', 'hage', 'mage']
        request.POST.lists() : [('text', ['hoge', 'hage', 'mage'])]
        >uemuraさん

        ありがとうございます^^
        長時間ハマリを防止できました!
        • もも
        • 2007/06/29 2:19 PM
        コメントする








           
        この記事のトラックバックURL
        トラックバック
        `LinuxなWEBデザイナーの覚書き。`_ の `コチラ`_ のエントリーより。 これ、自分も Django_ 使い始めた時に結構ハマった記憶があるなぁ。 .. _Django: http://www.djangoproject.com/ .. _`LinuxなWEBデザイナーの覚書き。`: http://php-sql-gdgd.jugem.jp/ ..
        • Humming Via Kitchen
        • 2007/06/27 11:47 PM

        PR

        calendar

        S M T W T F S
              1
        2345678
        9101112131415
        16171819202122
        23242526272829
        30      
        << April 2017 >>

        twitter

        selected entries

        categories

        archives

        recent comment

        • 結局CodeIgniter用汎用Modelクラス&汎用CRUDスクリプトを書きました
          プログラマー
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          よし
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          ななうぇぶ
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          よし
        • icu4.4以上が用意できないサーバーでSymfony2.3以上を使う方法
          よし
        • WindowsのPCで開発するphperがxhprofを使う方法
          ななうぇぶ
        • WindowsのPCで開発するphperがxhprofを使う方法
          川本
        • [バッドノウハウ]Symfony2で別テーブルの集計項目を一覧に含めたいとき
          よし
        • Symfony Advent Calendar JP 2012 day 14 - vendorをcomposerで管理しているプロジェクトにcomposerを使わずにバンドルを追加したときのautoloadの書き方
          77web
        • Symfony Advent Calendar JP 2012 day 14 - vendorをcomposerで管理しているプロジェクトにcomposerを使わずにバンドルを追加したときのautoloadの書き方
          ktz

        recent trackback

        • HTMLの表(TABLE)のセル(TD)に斜線を引くjavascriptライブラリ slash.js 作っちゃいました
          常山日記
        • django対symfony 日本語メール送信(その1 symfony編)
          CPA-LABテクニカル
        • CodeIgniterでユーザー認証
          されどLAMPな日々
        • 久々にdjangoを最新版にしたらHTMLがエスケープされちゃった!!(解決済み)
          常山日記
        • FastCGIを諦めてmod_pythonを使う。Apacheのアップグレード
          サーバー用語集
        • さくらインターネット、sqlite3でdjango@CGI版を使う際の設定メモ
          常山日記
        • さくらインターネット スタンダードプランでdjango使ってる方、DBは?
          mitszoの日記
        • python多次元リストをsort(並べ替え)する方法?
          mitszoの日記
        • フォームから送信した値とrequest.POSTの挙動($_POST@PHPとの比較)
          Humming Via Kitchen
        • 日本語テキストをtruncate@django(Python全般にも??)
          常山日記

        recommend

        links

        profile

        search this site.

        others

        mobile

        qrcode

        powered

        無料ブログ作成サービス JUGEM