使用Ajax将数据发布到Flask时的Python NoneTypeDataType

时间:2014-01-22 22:32:43

标签: jquery python ajax flask

我正在试图找出如何将ajax数据发布到我的烧瓶控制器上,

  • 没有ajax,它只能找到:

这是我的html模板中的表单:

<form  method=post action="{{ url_for( 'editreals', id=realist.index(row), name='head') }}">

在我的view.py中,获取索引'id'并投射它:

i = int(request.args.get("id")


  • 使用ajax,我使用jquery插件(http://www.appelsiini.net/projects/jeditable)进行编辑:

    <script>
    $(document).ready(function() {
       $(".rubric").editable('{{ url_for('editskills') }}',{
          submit: 'Ok',
          cancel: 'Cancel',
          tooltip : 'Clic to edit',
          type : 'textarea',
          name : 'rubric'
       });
    });
    </script>
    
    <h3 class="rubric", id={{ sklist.index(row) }}>{{ row["rubric"] }}</h3>
    

作为回报,我得到500错误 我不明白为什么控制器总是发回那个错误:

TypeError: list indices must be integers, not NoneTypeDataType :

从网络调试器我发送的数据对我来说似乎没问题:

FormData :
  rubric: datasubmitted
  id: 0

那些领域只是Strings,nop?为什么python说它们是NoneTypeDataType?

[EDIT-1]

标题:

Request URL:http://<Server-IPAddress>:5000/editskills
Request Method:POST
Status Code:500 INTERNAL SERVER ERROR
Request Headersview source
Accept:text/html, */*; q=0.01
Accept-Encoding:gzip,deflate,sdch
Accept-Language:fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
Connection:keep-alive
Content-Length:25
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Cookie:session=eyJsb2dnZWRfaW4iOnRydWV9.BcMSfg.j5SaVklwzSzTdttCciYL_9dqZNg
DNT:1
Host:<Server-IPAddress>:5000
Origin:http://<Server-IPAddress>:5000
Referer:http://<Server-IPAddress>:5000/competences
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)           Chrome/32.0.1700.76 Safari/537.36
X-Requested-With:XMLHttpRequest
Form Dataview sourceview URL encoded
rubric:1Réseaux
id:0
Response Headersview source
Connection:close
Content-Type:text/html; charset=utf-8
Date:Thu, 23 Jan 2014 20:52:19 GMT
Server:Werkzeug/0.9.4 Python/2.7.3
X-XSS-Protection:0

预览:

File "/home/noa/virtualenv/folio/foliodev/portfolio/views.py", line 39, in editskills
v = liste[i]
TypeError: list indices must be integers, not NoneType

抱歉,我犯了一个错误,有导致错误的代码:

i = request.args.get("id", type=int)
v = liste[i]

如果我尝试这样做:

i = int(request.args.get("id"))

它直接打破演员:

i = int(request.args.get("id"))
TypeError: int() argument must be a string or a number, not 'NoneType'

这让我关注为什么我发送的数据是'NoneType'

非常感谢你的时间。

1 个答案:

答案 0 :(得分:1)

问题在于,在您的工作form示例中,您要在查询字符串中发送id(这使request.args可用)。 jEditable将id作为POST的一部分在响应正文中发送 - Flask在request.form下公开此数据。将i = int(request.args.get("id"))更改为i = int(request.form.get("id")),事情就会奏效。