สร้าง URL แบบไดนามิกใน Flask ด้วย url_for ()


183

ครึ่งหนึ่งของเส้นทางขวดของฉันต้องพูดตัวแปรหรือ/<variable>/add /<variable>/removeฉันจะสร้างลิงค์ไปยังที่ตั้งเหล่านั้นได้อย่างไร

url_for() รับอาร์กิวเมนต์หนึ่งตัวสำหรับฟังก์ชันเพื่อกำหนดเส้นทางไป แต่ฉันไม่สามารถเพิ่มอาร์กิวเมนต์

คำตอบ:


282

ใช้อาร์กิวเมนต์คำหลักสำหรับตัวแปร:

url_for('add', variable=foo)

12
หมายความว่าฟังก์ชั่นคือdef add(variable)อะไร?
endolith

5
@endolith ใช่ ** kwargs ที่ส่งไปยังurl_forจะผ่านเป็นพารามิเตอร์ฟังก์ชันสำหรับเส้นทางกฎตัวแปรใน Flask
highvolt

3
แต่ปัญหาคือ 'foo' อยู่นอกเหนือขอบเขตถ้ามันเป็นตัวแปรจาก Python จากนั้นคุณจะแก้ปัญหาได้อย่างไร

1
เพียงเพื่อให้ชัดเจนถ้าคุณมี@app.route("/<a>/<b>")และdef function(a,b): ...เป็นหน้าที่ของมันคุณควรใช้url_forและระบุอาร์กิวเมนต์คำหลักเช่นนี้:url_for('function', a='somevalue', b='anothervalue')
jarrettyeo

120

url_forใน Flask ใช้สำหรับสร้าง URL เพื่อป้องกันค่าใช้จ่ายในการเปลี่ยน 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
ฉันมีคำถามในตัวอย่างแรกเมธอด index ถูกส่งเป็นสตริงขณะที่ในเมธอดที่สอง find_question จะถูกส่งเป็นตัวแปร ทำไม?
दनंद

1
@AnandTyagi นี่คือสิ่งที่คุณหมายถึงอะไร? การกำหนดเส้นทาง URL
Tony Chou

3
@ आनंदถ้าตัวแปรคุณ: {{ url_for('find_question' ,question_id=question.id) }}และไม่ใช่{{ url_for('find_question' ,question_id={{question.id}}) }}
Abdur-Rahmaan Janhangeer

38

อ้างถึงเอกสาร Flask API สำหรับflask.url_for()

ตัวอย่างข้อมูลการใช้งานอื่น ๆ สำหรับการลิงก์ js หรือ css กับเทมเพลตของคุณอยู่ด้านล่าง

<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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.