1

使用瓶子内置的 WSGI 服务器,这里是相关的 HTML:

form style="display: inline;" action="/forum?id=2&page=5">
        <input type="submit" value="Forum"/></form>

这是我的应用程序的路线:

@rolodex.route('/forum')
def display_forum():
    forum_id = bottle.request.query.id
    page = bottle.request.query.page or '1'
    return 'Forum ID: %s (page %s)' % (forum_id, page)

这是我单击“论坛”按钮时得到的结果:

论坛ID:(第1页)

关于我可能做错了什么的任何想法?这基本上正是文档中的示例:

bottlepy.org/docs/0.11/tutorial.html#request-data

4

2 回答 2

1

也许表单操作中的查询字符串正在与请求交互。当您制作id正确page的表单域时会发生什么?像这样:

<form action="/forum">
    <input type="text" name="id" value="2"/>
    <input type="text" name="page" value="5"/>
    <input type="submit" value="Forum"/>
</form>

(或者,当你直接用浏览器点击它时?例如,http://yourserver/forum?id=2&page=5

于 2013-04-27T01:40:18.133 回答
0

我发现的所有关于此的文档都非常模棱两可,但似乎大多数浏览器不会处理和提交附加到 <form> 操作的查询字符串。执行此操作的正确方法是将查询参数作为隐藏文本字段包含在 <form> 容器的主体中。所以代替这个:

<form style="display: inline;" action="/forum?id=2&page=5">
    <input type="submit" value="Edit"/></form>

做这个:

<form style="display: inline;" action="/forum">
  <input type="hidden" name="id" value="2"/>
  <input type="hidden" name="page" value="5"/>
  <input type="submit" value="Edit"/>
</form>

HTML 规范规定表单动作必须是 HTTP URI,并且 URI 的定义确实包括查询字符串的可能性;但是,如果没有别的,当使用隐藏输入的选项是一种更清晰、更不模糊的解决方案时,在表单操作中包含查询字符串变量可能应该被认为是错误的形式。

此外,正如 Ron Rothman 在另一个答案中所指出的,在这种情况下根本没有理由使用 <form> ——只需使用带有适当 href 的链接:

<a class="button" href="/forum?id=2&page=5">Edit</a>

使用这个 CSS(或类似的东西):

.button {font-size: small;
     font-family: Verdana, Arial, sans-serif;
     text-decoration: none;
     background-color: #DDDDDD;
     color: #222222;
     padding: 1px 12px 1px 12px;
     border-radius:7px;
     border-top: 1px solid #CCCCCC;
     border-right: 1px solid #333333;
     border-bottom: 1px solid #333333;
     border-left: 1px solid #CCCCCC;}
于 2013-04-30T16:33:27.420 回答