【发布时间】:2014-08-04 07:18:33
【问题描述】:
我是 Flask 新手,正在编写一个带有搜索功能的简单 Flask 应用程序。与谷歌搜索类似,我想在显示结果的同时保留搜索结果页面中的搜索输入框。所以,我将搜索表单放在基本模板中,并从基本模板中派生出一个搜索结果模板,以显示搜索表单和搜索结果。
为此,我做了以下事情:-
带有页面元数据和表单的基本模板(base.html)(即使在结果页面中也应该基本存在)。
<html>
<head>
{% if title %}
<title>{{title}}</title>
{% else %}
<title>Search</title>
{% endif %}
</head>
<body>
<h1>Search </h1>
<form action="/series_search" method="post" name="search">
{{form.hidden_tag()}}
<p>
Please enter query: <br>
{{form.search(size=10)}}
</p>
<p><input type="submit" value="Search"></p>
</form>
<br>
{% block content %}{% endblock %}
</body>
</html>
派生模板(derived.html)有以下代码,继承了基础模板(有搜索模板):
{% extends "base.html" %}
{% block content %}
<h1>Search Result</h1>
{% if result %}
<p> Title: {{result.title}}</p>
{% else %}
<p> search not found!!</p>
{% endif %}
{% endblock %}
而且,在视图中,如下
@app.route('/search', methods = ['POST', 'GET'])
def search():
form = SearchForm()
if form.validate_on_submit():
print "form validated"
query = form.search.data
result = Lib.get_result(query)
return render_template('derived.html', result = result)
return render_template('search.html',
title = 'Search',
form = form)
如果我输入查询并提交搜索表单,则会收到以下错误,
....
....
File "/Users/webapp/app/templates/derived.html", line 1, in top-level template code
{% extends "search.html" %}
File "/Users/webapp/app/templates/search.html", line 12, in top-level template code
{{form.hidden_tag()}}
File "/Users/webapp/flask/lib/python2.7/site-packages/jinja2/environment.py", line 397, in getattr
return getattr(obj, attribute)
所以,基本上在按下提交按钮后,视图会呈现派生自 base.html 的 derived.html。 base.html 有一个应该设置的表单。
- 如何在调用派生模板时传递基础模板的表单对象?
- 我的方法是否适合我想要实现的目标?如果有其他的,请提出建议。
提前谢谢你
【问题讨论】:
标签: python flask jinja2 flask-wtforms