फ्लास्क में url_for () के साथ डायनामिक URL बनाएं


180

मेरे फ्लास्क मार्गों में से आधे को एक चर कहने की आवश्यकता होती है, /<variable>/addया /<variable>/remove। मैं उन स्थानों के लिंक कैसे बनाऊँ?

url_for() फ़ंक्शन के रूट के लिए एक तर्क लेता है, लेकिन मैं तर्क नहीं जोड़ सकता?

जवाबों:


277

यह चर के लिए खोजशब्द तर्क लेता है:

url_for('add', variable=foo)

12
मतलब यह है कि फ़ंक्शन क्या है def add(variable)?
एंडोलिथ

5
@endolith, हाँ। ** kwargs url_for
फ़्लैस्क

3
लेकिन समस्या यह है कि पायथन से परिवर्तनशील होने पर 'फू' कैसे दायरे से परे है। फिर, आप इसे कैसे हल करते हैं?

1
बस इतना है कि यह स्पष्ट है, अगर आपके पास @app.route("/<a>/<b>")और def function(a,b): ...इसके कार्य के रूप में है, तो आपको url_forइसके कीवर्ड तर्क का उपयोग करना और निर्दिष्ट करना चाहिए :url_for('function', a='somevalue', b='anothervalue')
jarrettyeo

116

url_forफ्लास्क का उपयोग एक यूआरएल बनाने के लिए किया जाता है ताकि किसी एप्लिकेशन (टेम्प्लेट सहित) में URL को बदलने के ओवरहेड को रोका जा सके। इसके बिना url_for, यदि आपके ऐप के रूट URL में कोई बदलाव है तो आपको इसे हर उस पेज में बदलना होगा जहाँ लिंक मौजूद है।

वाक्य - विन्यास: url_for('name of the function of the route','parameters (if required)')

इसका उपयोग इस प्रकार किया जा सकता है:

@app.route('/index')
@app.route('/')
def index():
    return 'you are in the index page'

अब यदि आपके पास अनुक्रमणिका पृष्ठ लिंक है: तो आप इसका उपयोग कर सकते हैं:

<a href={{ url_for('index') }}>Index</a>

आप इसके साथ बहुत अधिक ओ सामान कर सकते हैं, उदाहरण के लिए:

@app.route('/questions/<int:question_id>'):    #int has been used as a filter that only integer will be passed in the url otherwise it will give a 404 error
def find_question(question_id):  
    return ('you asked for question{0}'.format(question_id))

उपरोक्त के लिए हम उपयोग कर सकते हैं:

<a href = {{ url_for('find_question' ,question_id=1) }}>Question 1</a>

इस तरह आप बस मापदंडों को पारित कर सकते हैं!


1
मेरे पास एक प्रश्न है, पहले उदाहरण में, सूचकांक विधि एक स्ट्रिंग के रूप में पारित की गई थी जबकि दूसरी विधि में, find_question को चर के रूप में पारित किया जा रहा है। क्यों?
आनंद

1
@AnandTyagi क्या आपका यही मतलब है? URL रूटिंग
टोनी चाउ

3
@ आनंद अगर वेरिएबल आप करते हैं: {{ url_for('find_question' ,question_id=question.id) }}और नहीं{{ url_for('find_question' ,question_id={{question.id}}) }}
अब्दुर-रहमान जनाबगेसर

38

के लिए फ्लास्क एपीआई दस्तावेज़ देखेंflask.url_for()

जेएस या सीएसएस को आपके टेम्पलेट से जोड़ने के लिए उपयोग के अन्य नमूना स्निपेट नीचे हैं।

<script src="{{ url_for('static', filename='jquery.min.js') }}"></script>

<link rel=stylesheet type=text/css href="{{ url_for('static', filename='style.css') }}">

1

टेम्पलेट:

फ़ंक्शन नाम और तर्क पास करें।

<a href="{{ url_for('get_blog_post',id = blog.id)}}">{{blog.title}}</a>

देखें, समारोह

@app.route('/blog/post/<string:id>',methods=['GET'])
def get_blog_post(id):
    return id
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.