2013-03-04 42 views
1

我有一個模板,它允許用戶輸入搜索參數(search.html)如何在沒有POST請求的情況下獲取WTF表單對象數據?

{% 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個視圖一個用於searchcriteria部分(包含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) 

我現在面臨的問題是,當Ajax調用到NotificationResultView,我相信這是因爲取得了跆拳道表單對象不填充沒有發佈帖子請求,但根據我的設計,不需要發佈帖子請求。

我已讓Ajax請求的POST請求嘗試,但即使如此,跆拳道表單對象回來空。

現在我唯一的選擇是,如果我通過搜索條件查詢字符串進行Ajax調用的時候,但不知道這是最好的approach.Please建議如何在這種情況下進行。

回答

1
$.ajax(
    { 
     url: ‘result’, 
     dataType: "html", 
     success: function(data) 
     { 
           $("# searchResults").html(data);  } }); 

在您的ajax函數中,您沒有發送任何數據。

更新:好吧,你實際上是發送數據和URL是正確的。

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) 

從上方的視圖函數(它被路由到「結果」),您的問題是,searchform = SearchForm()沒有填充供應的GET查詢。

爲了解決這個問題,你必須將值提供給searchform。有很多方法可以做到這一點(最明顯的方法是用表單對象創建,擺脫searchform = SearchForm(formdata = request.args)),並且可以通過使用擴展名爲flask-wtf的工具更容易地完成。

這裏是爲了做到這一點(我會提供我的例子,因爲我不知道你如何建立你的查詢字符串)的一種方法:

在HTML

​​

與假設參數成功提供給視圖:

@app.route('/result', method=['GET']) 
def fooview(): 
    foo = request.args.get('foo', '') 
    bar = request.args.get('bar', '') 
    answer = request.args.get('answer', None, type=int) 
    .. 

希望有所幫助。

+0

感謝您指出,在創建從我的原代碼,我忘了,包括該位的例子。我現在已經更新了這個問題 – Priyam 2013-03-06 11:33:35

相關問題