2012-02-12 23 views
7

में url_for के साथ एक POST अनुरोध जारी करें मैं फ्लास्क में एक जिन्जा टेम्पलेट के भीतर एक POST अनुरोध जारी करने का प्रयास कर रहा हूं। हालांकि, डिफ़ॉल्ट रूप से जीईटी के माध्यम से पैरामीटर पास किए जाते हैं, और यह विशेष विधि केवल POST अनुरोध स्वीकार करती है।फ्लास्क

मैंने नीचे दिए गए _method को निर्दिष्ट करने का प्रयास किया, लेकिन यह अभी भी POST के बजाय GET के साथ पैरामीटर पास करता है।

<li><a href = "{{ url_for('save_info', _method='POST', filepath=s.name) }}"><div class="nodes">{{ s.title}} - {{ song.owner }}</div></a></li> 

(त्रुटि संदेश वही है जो मैं _method निर्दिष्ट करता हूं या नहीं)।

+0

धन्यवाद, के बारे में '_method' आर्ग में पता नहीं था। – iurii

उत्तर

10

सभी लिंक GET अनुरोध हैं। आप POST को मजबूर नहीं कर सकते हैं।

एक वैकल्पिक इस होगा:

@app.route('/save_info/<filepath>', methods=['GET', 'POST']) 
def save_info(filepath): 
    if request.method == 'POST' or filepath: 
    ... 

आप की अनदेखी करने के है कि आप एक GET अनुरोध भेजा आपके कोड के लिए मजबूर करने के लिए एक अच्छा तरीका खोजना होगा।

+0

एचएम, यूआरएल के माध्यम से सूचना उत्तीर्ण किए बिना ऐसा करने का कोई और तरीका है, तो फॉर्म किस तरह से करते हैं? यह वास्तव में उपयोगकर्ता को प्रस्तुत किए जाने के तरीके में एक रूप नहीं है, लेकिन यह वही विचार है (उपयोगकर्ता को प्रस्तुत एक चयन)। – chimeracoder

+0

आप AJAX या किसी फ़ॉर्म के बिना दुखद रूप से 'POST' अनुरोध नहीं भेज सकते हैं। – Blender

2

आप या तो एक फॉर्म बना सकते हैं जिसमें केवल एक सबमिट बटन हो, या AJAX या किसी अन्य क्लाइंट साइड स्क्रिप्टिंग का उपयोग करके POST भेजें। जहां तक ​​मुझे पता है, आप लिंक को एक पोस्ट नहीं भेज सकते हैं, हालांकि।

0

आप एक मिडलवे जोड़ सकते हैं जो एक जीईटी तर्क की खोज करता है जो http विधि को ओवरराइट करता है। वहाँ देखो: http://flask.pocoo.org/snippets/38/

आपका नया लिंक इस तरह दिखेगा:

<li><a href = "{{ url_for('save_info', __METHOD_OVERRIDE__='POST', filepath=s.name) }}"><div class="nodes">{{ s.title}} - {{ song.owner }}</div></a></li>