【发布时间】:2016-12-23 20:22:47
【问题描述】:
我是 Flask 的新手,正在尝试从登录表单中获取用户输入的名称并将其传递到另一个页面。使用我当前的代码,当在result 视图中调用request.args.get('artistName') 时,表单不会向result 页面传递任何参数并返回none。怎么了? print form.errors 不显示任何内容。
views.py 计划:
from flask import render_template, request, url_for, redirect
from app import app
from .forms import UserName
@app.route('/', methods=['GET','POST'])
def login():
form = UserName()
if form.validate_on_submit():
return redirect('/result')
render_template('home.html',form=form)
@app.route('/result', methods=['POST', 'GET'])
def result(name):
return render_template('results.html')
home.html:
{% extends "base.html" %}
{% block content %}
<form action="{{ url_for('result') }}" method='post'>
{{ form.csrf_token }}
{{ form.hidden_tag }}
<p>Enter your artist name: </p>
{{ form.artistName(size=100) }}
{{ form.submit }}
</form>
{% endblock %}
还有forms.py:
from flask_wtf import FlaskForm
from wtforms import TextField, SubmitField
from wtforms.validators import DataRequired
class UserName(FlaskForm):
artistName = TextField('artistName', [DataRequired()])
submit = SubmitField("Go")
非常感谢任何帮助!
【问题讨论】:
-
如果您对
/执行 GET 操作,生成的 HTML 表单是什么样的? -
我很抱歉,但你能说得更直白一点吗?
-
没关系...我认为问题可能是由于您的 URL 结构。如果用户正在指定艺术家姓名,则该参数不应是路由的一部分,而应位于查询字符串中。例如:
/result?name=foo。如果您将表单的方法更改为GET并从您的url_for语句中删除name参数,那么您将非常接近。 -
<form action="{{ url_for('result') }}" method='get'>你是这个意思吗?如果是这样,这会导致BuildError: Could not build url for endpoint 'result'. Did you forget to specify values ['name']? -
将
参数从视图函数中取出,然后使用 request.args.get('artistName') 访问该字段。如果没有参数,则 url 不会按照它的配置方式构建。
标签: python flask wtforms flask-wtforms