ลิงก์ไปยังไฟล์คงที่ของ Flask ด้วย url_for


93

คุณใช้url_forใน Flask เพื่ออ้างอิงไฟล์ในโฟลเดอร์อย่างไร? ตัวอย่างเช่นฉันมีไฟล์คงที่ในstaticโฟลเดอร์ซึ่งบางไฟล์อาจอยู่ในโฟลเดอร์ย่อยเช่นstatic/bootstrap.

เมื่อฉันพยายามให้บริการไฟล์จากstatic/bootstrapฉันได้รับข้อผิดพลาด

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

ฉันสามารถอ้างอิงไฟล์ที่ไม่ได้อยู่ในโฟลเดอร์ย่อยด้วยสิ่งนี้ซึ่งได้ผล

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

วิธีที่ถูกต้องในการอ้างอิงไฟล์แบบคงที่url_forคืออะไร? ฉันจะใช้url_forสร้าง url ไปยังไฟล์แบบคงที่ได้อย่างไร?

คำตอบ:


185

คุณมีstaticปลายทางสำหรับไฟล์คงที่โดยค่าเริ่มต้น นอกจากนี้Flaskแอปพลิเคชันยังมีข้อโต้แย้งดังต่อไปนี้:

static_url_path: สามารถใช้เพื่อระบุเส้นทางอื่นสำหรับไฟล์คงที่บนเว็บ ค่าเริ่มต้นเป็นชื่อของstatic_folderโฟลเดอร์

static_folder: โฟลเดอร์ที่มีไฟล์คงที่ซึ่งควรให้บริการที่static_url_path. ค่าเริ่มต้นเป็นโฟลเดอร์ 'คงที่' ในเส้นทางรากของแอปพลิเคชัน

หมายความว่าfilenameอาร์กิวเมนต์จะใช้พา ธ สัมพัทธ์ไปยังไฟล์ของคุณstatic_folderและแปลงเป็นพา ธ สัมพัทธ์รวมกับstatic_url_default:

url_for('static', filename='path/to/file')

จะแปลงไฟล์เส้นทางจากไปเส้นทางstatic_folder/path/to/file URLstatic_url_default/path/to/file

ดังนั้นหากคุณต้องการรับไฟล์จากstatic/bootstrapโฟลเดอร์คุณใช้รหัสนี้:

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

ซึ่งจะถูกแปลงเป็น (โดยใช้การตั้งค่าเริ่มต้น):

<link rel="stylesheet" type="text/css" href="static/bootstrap/bootstrap.min.css">

ดูurl_forเอกสารประกอบด้วย


โปรดทราบว่าFlaskเพิ่มกฎ url สำหรับstaticจุดสิ้นสุดเมื่อเริ่มต้นดังนั้นการเปลี่ยนแอตทริบิวต์เหล่านี้ในFlaskอินสแตนซ์จะไม่เปลี่ยนแปลงurl_for('static', ...)ผลลัพธ์ หากต้องการเปลี่ยนการเริ่มต้นโพสต์จุดสิ้นสุดแบบคงที่โปรดดูที่gist.github.com/brycepg/593ffb5ce9316d2871c7f24f9de34c24
Bryce Guinta

1

ในกรณีของฉันฉันมีคำสั่งพิเศษในไฟล์กำหนดค่า nginx:

location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ {
            try_files $uri =404;
    }

ลูกค้าทั้งหมดได้รับ '404' เนื่องจาก nginx ไม่มีใครรู้จัก Flask

ฉันหวังว่ามันจะช่วยใครสักคน


ไฟล์คอนฟิกูเรชันหลักคือ /etc/nginx/nginx.conf (บน Linux) อาจเป็นเส้นทางที่คล้ายกันบน Windows (ฉันไม่รู้จริงๆ)
Andrew Grow

นี่คือการกำหนดค่าฝั่งเซิร์ฟเวอร์หากคุณเพิ่งพัฒนาแอปบนเดสก์ท็อปคุณอาจไม่มี / ต้องการ
adamczi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.