我正在编写一个小型门户网站,它将使用户能够为计算语言学项目注释一些文本,并将注释保存到文件中。
我在保存修改后的文本时遇到问题。
我的页面是:
from bottle import template
from project import app
from bottle import request
from bottle import redirect
import random
@app.route('/')
def index():
notices = 'This is a placeholder text for StackOverflow'
return template('annotator/index', package=notices)
@app.route('/annotator/submit', method=['GET'])
def submit():
with open('output.txt', 'w') as outfile:
package = str(request.GET.get('package'))
outfile.write(str(package))
redirect('/')
我的页面布局是:
<!doctype html>
<head>
<link rel="stylesheet" type="text/css" href="/css/style.css">
<title>My App</title>
</head>
<body>
<div class="page">
<h1>NM Annotator Demo V 0.1</h1>
% if package is not '':
<form action='annotator/submit', method="GET">
<textarea name="package" ROWS=20 COLS=70>{{package}}</textarea>
<td><INPUT TYPE=SUBMIT name="package" VALUE="Submit"></td>
</form>
%end
%include
</div>
</body>
提交页面为:
<form action="annotator/submit" method="post">
<dl>
Thank you
</dl>
</form>
%rebase layout/layout
但是,文件中只保存了单词"submit",而不是的内容,这是我想要保存的内容,因为这将是注释的结果。
这是我的第一个网络应用程序,我有点困惑。
您的文本区域和提交表单项都命名为"package"。
把你的按钮改成这个,看看这是否有帮助:
<INPUT TYPE=SUBMIT name="submit" VALUE="Submit">
编辑:解释
使用两个具有相同名称的表单项的问题是,应用程序在查询字符串中同时接收这两个表单项。例如,
http://yourserver.com/annotator/submit?package=sometext&package=Submit
在您的应用程序中,您将有效地获得查询参数的dict,它看起来像{'package': 'sometext'}
或{'package': 'Submit'}
。得到哪一个完全取决于应用程序(Bottle),但最有可能的实现——按顺序处理查询参数——会导致第二个值优先,因为它会覆盖第一个值。
大多数web框架都公开了一种获取给定名称的所有查询参数的方法;在Bottle中,它是request.query.getall。因此request.query.getall('package')
将返回['sometext', 'Submit']
。但在您的情况下,首先要避免名称冲突,而不是保留名称然后检索多个值。
希望能有所帮助!