我有一个模板,允许用户输入搜索参数(search.html)
{% from "_formhelpers.html" import render_field %}
<form method=”post”>
<dl>
{{ render_field(form. notificationId) }}
{{ render_field(form. recordName) }}
</dl>
<div id="searchResults" > </div>
</form>
宏
{% macro render_field(field) %}
<dt>{{ field.label }}
<dd>{{ field(**kwargs)|safe }}
{% if field.errors %}
<ul class=errors>
{% for error in field.errors %}
<li>{{ error }}</li>
{% endfor %}
</ul>
{% endif %}
</dd>
{% endmacro %}
以及搜索结果的模板(result.html)
{% for notification in content %}
Result:
content[notification]['type'] }}</td>
{% endfor %}
我正在使用以下 ajax 请求来获取搜索结果并显示在上面的模板中。在两个搜索字段的 keyup 上调用 ajax 函数
$.ajax(
{
url: ‘result’,
dataType: "html",
data:createQueryString(),// gets the value from the dataFields and creates a queryString
success: function(data)
{
$("# searchResults").html(data); } });
我也有 2 个视图,一个用于搜索条件部分(包含 2 个搜索字段的部分),一个用于搜索结果部分。
class NotificationSearchView(MethodView):
def get(self):
searchform = SearchForm()
return render_template("search.html”, searchform=searchform)
@classmethod
def registerSelf(cls, app):
NotificationSearchView.app = app
app.flaskApp.add_url_rule('/search ', view_func=NotificationSearchView.as_view(‘search’))
class NotificationResultView(MethodView):
def get(self):
searchform = SearchForm()
success, content=self.performSearch(searchform) //search method which takes the search parameters and performs the search
return render_template("result.html”, content=content)
@classmethod
def registerSelf(cls, app):
NotificationResultView.app = app
app.flaskApp.add_url_rule('/result', view_func= NotificationResultView.as_view(‘result’))
WTF 表单类
from wtforms import Form, TextField
class SearchForm(BaseForm):
notificationId = TextField(notificationId)
recordName = TextField(recordName)
我面临的问题是,当对 NotificationResultView 进行 ajax 调用时,未填充 wtf 表单对象,我认为这是因为没有触发发布请求,但根据我的设计,不需要发布要求。
我曾尝试将 ajax 请求作为发布请求,但即便如此,wtf 表单对象仍为空。
现在我唯一的另一个选择是,如果我在进行 ajax 调用时通过查询字符串中的搜索条件,但不确定这是否是最好的方法。请建议在这种情况下如何进行。