2014-12-20 34 views
0

我想知道如何將URL參數(不是請求)傳遞給url_for函數,但我無法找到它。在下面的例子中,我需要通過表格q_id,就像我用incrRight一樣。那麼,在這種情況下,我如何在url_for中有變量?燒瓶 - 使用html中的參數生成url

<form action="{{url_for('answer',q_id='5495eb77433f064294361ceb')}}" method="post"> 
    <input type="text" name="incrRight" value="0"> 
    <input type="submit"/> 
</form> 

這是我有我的控制器上:

@app.route('/api/v1.0/question/<string:q_id>/answer', methods = ['POST']) 
def answer(q_id): 
    incrRight = request.form.get('incrRight') 
    . . . 

我需要我的html表單能夠通過傳遞q_id和incrRight參數與上面的功能進行溝通。

+0

你的意思是*查詢參數*由表格形成?在這種情況下,您必須將方法更改爲「GET」。或者你的意思是在POST機構?無論哪種方式,你的意思是瀏覽器將它們包含爲參數? –

+0

表單將**不生成''../ answer/5495eb77433f064294361ceb?incrRight = ''。它會生成''../ answer/5495eb77433f064294361ceb'',其中'incrRight = '在POST正文中發送,而不是URL。 –

回答

1

您可以通過添加更多<input>標籤添加其他表單參數。如果表單的用戶是不應該改變的項目,使用<input type="hidden">元件:

<form action="{{ url_for('answer') }}" method="post"> 
    <input type="text" name="incrRight" value="0" /> 
    <input type="hidden" name="q_id" value="5495eb77433f064294361ceb" /> 
    <input type="submit"/> 
</form> 

確實要求該answer()視圖可以在沒有q_id參數被調用,當然:

@app.route('/api/v1.0/question/answer', methods=['POST']) 
@app.route('/api/v1.0/question/<string:q_id>/answer', methods = ['POST']) 
def answer(q_id=None): 
    if q_id is None: 
     q_id = request.form['q_id'] 
    incrRight = request.form.get('incrRight') 

此處URL中缺少q_id參數表示瀏覽器在POST主體中包含問題標識。

另一種選擇是編寫JavaScript代碼,根據表單中的q_id字段調整參數action,但這需要您的訪問者啓用JavaScript。

+0

因此,如果q_id是強制性的,我需要將它放在「{{url_for('answer',q_id ='dsad21')}}」中,並添加將覆蓋硬編碼值的輸入字段? – Giannis

+0

@Giannis:不,網址被您的瀏覽器用來知道在哪裏發佈表單。燒瓶然後將路由到正確的視圖。你必須調整你的視圖註冊才能接受一個沒有'q_id'參數*的帖子*。 –

+0

@Giannis:您可以在URL中的'q_id'字段中輸入一個特殊的代碼,您可以在* body中查找問題標識*;但在我的版本中,我沒有使用問題ID代替。 –