2012-08-09 136 views
-1

所以我有這種形式的(一些元件爲了清楚而移除)Django的request.REQUEST被截斷數據

<form id="{{ section }}-submission-form{{ cell_id }}"> 

    <input type=hidden name="section" value="{{ section }}" /> 
    <input type="hidden" name="school" id="{{ section }}-submit-school{{ cell_id }}" /> 


    {% if section == "posts" %} 
     <input type=hidden name="url" /> 
     <textarea class="{{ section }}txtinput{{ cell_id }}" name="text-submission" 
        default="{% if is_advice %}What's your question?{% else %}What's on your mind?{% endif %}" 
        id="{{ section }}-suggestion-box{{ cell_id }}" 
        style="margin: 0 0 .5em 0;font-family: Arial, sans-serif;font-size: 14px; width: 410px;" 
        rows='8'></textarea> 
     <br /> 
    {% endif %} 
    {% if section == "photos" %} 
     <span style='line-height: 40px;'> 
     <label class="photouploadlabel">URL</label><input type="text" name="image-url" style="width: 335px" /><br> 
     <label class="photouploadlabel">File</label><input type="file" name="image-file" style="width: 335px"/><br> 
     <label class="photouploadlabel">Caption</label><input type="text" id="image-caption{{ cell_id }}" 
                   name="image-caption" style="width: 335px" default="optional"/> 
     </span> 
    {% endif %} 


    <div id="{{ section }}-bottomdiv{{ cell_id }}" style="height: 45px; margin-top: .5em; width: 413px;"> 
     <div style="height: 45px"> 
     <label id="{{ section }}-tagsbutton{{ cell_id }}" 
       style="margin-right: .5em; cursor: pointer; vertical-align: bottom; float:left; line-height: 1.8em;">Tags</label> 

     <input id="{{ section }}-tagsinput{{ cell_id }}" type="text" name="tags-list" style="position: relative"/> 
        <button id="send-{{ section }}-suggestion{{ cell_id }}" disabled="disabled" 
       style="float:right; position: relative; bottom: 7px; right: -4px;">Post</button> 
     </div> 

的標籤列表輸入變成自動完成和用戶選擇的標籤,然後將其加入到全球js變量「選定標籤」。當用戶按下「郵報」,我有這樣的代碼:

  alert(selectedtags); 
     $("#"+section+"-submission-form"+cellid).ajaxSubmit({ 
      url: '/save-suggestion/', 
      type: 'post', 
      data: {'tags': selectedtags }, 
      dataType: 'json', 
      success: function(response){ 
       clear_text(section, cellid); 
       location.reload(); 
      }, 

這裏的怪異位:哪個部分我在,警報作品。但是,如果我打印request.REQUEST在服務器端,如果該節的照片我得到

{u'image-url': u'http://i.imgur.com/vUxla.jpg', u'tags-list': u'', u'tags': u'wtf,crazy,pics', u'section': u'photos', u'school': u'1997', u'anonymity-level': u'schoolandmajor', u'image-file': u'', u'image-caption': u''} 

即我想要的東西。但是,如果該節的帖子,我得到

{u'text-submission': u'wtf', u'school': u'1997', u'tags-list': u'', u'url': u'', u'section': u'posts', u'tags[]': u'crazy', u'anonymity-level': u'schoolandmajor'} 

因此,不僅是它改名爲標籤[](這我以前見過和我沒有太在意,但是......),它也是我的截斷標籤列表只是最後一個條目。

有沒有人知道我可能會做錯什麼?

編輯:經過進一步檢查,這是使用request.REQUEST正在做的事情,而不是request.POST。

那麼,究竟是怎麼回事?

回答

4

request.REQUEST是一個MergedDict,其中包含POST的QueryDict和GET的一個。迭代MergedDict時,您將獲得每個鍵的單個值,這是__str__方法爲該類所做的。您可以通過使用QueryDict.getlist像這樣解決這個問題:

print request.REQUEST.getlist('tags[]') 

這在我的測試,得出:

[u'asd', u'123'] 

如果我只是print request.REQUEST['tags[]'],我得到的只是。

+1

+1在django代碼(甚至沒有顯示)中實際顯示問題 – Toote 2012-08-09 01:26:32

+0

hm ...我以爲我已經嘗試了精確的代碼片段...也許不是。我會再嘗試。謝謝! – Colleen 2012-08-10 02:31:35

+0

是的,我使用的是精確的代碼片段,有時它不工作...顯示爲標籤而不是標籤[] .... – Colleen 2012-08-13 20:59:01

0

你的問題似乎在你的JavaScript。您在兩次請求中收到的數據看起來都不一樣。在第一個請求tags是以下字符串:

u'tags': u'wtf,crazy,pics' 

在後者,雖然,標籤設置爲以下幾點:

u'tags[]': u'crazy' 

正如你很好提到,改變了名字,只有最後一項保留。這種差異似乎源於這樣一個事實,即第一個請求tags不是一個列表,而是一個由逗號分隔的字符串的單個字符串。

我認爲你會通過改變你的代碼來解決你的問題,使它的處理變得一致。基於發送列表導致問題發生的事實可能表明,要走的路線是首次請求的逗號分隔字符串。

使用列表時沒有得到正確數據的事實可能是由於JSON數據接收端的解析器,因爲它在技術上是一個對象,並且對象不能有兩個具有相同名稱的成員(並且您的代碼可能將它們全部作爲tags[]發送)。

+0

這些都不是不同的請求...他們是不同的方式Django正在處理相同的請求。 – Colleen 2012-08-10 01:11:57