फ्लास् स्टेटिक फाइल्स को url_for से लिंक करें


91

आप url_forएक फ़ोल्डर में एक फ़ाइल को संदर्भित करने के लिए फ्लास्क में कैसे उपयोग करते हैं ? उदाहरण के लिए, मेरे पास 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 उत्पन्न करने के लिए कैसे उपयोग करूं ?

जवाबों:


182

आपके पास स्थिर फ़ाइलों के लिए डिफ़ॉल्ट रूप से 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को url पथ में कनवर्ट करेगा static_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में staticसमापन बिंदु के लिए एक url नियम जोड़ता है, इसलिए Flaskउदाहरण पर इन विशेषताओं को बदलने से url_for('static', ...)परिणाम नहीं बदलता है । स्टेटिक एंडपॉइंट पोस्ट इनिशियलाइज़ेशन को बदलने के लिए, यह gist 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' प्राप्त हुए हैं, क्योंकि नगेंक्स फ्लास्क के बारे में कुछ भी नहीं जानते हैं।

मुझे उम्मीद है कि यह किसी की मदद करेगा।


प्राथमिक कॉन्फ़िगरेशन फ़ाइल /etc/nginx/nginx.conf (लिनक्स पर) है। यह विंडोज पर समान पथ हो सकता है (मुझे वास्तव में पता नहीं है)
— एंड्रयू ग्रो

यह सर्वर साइड कॉन्फ़िगरेशन है, यदि आप अपने डेस्कटॉप पर सिर्फ एक ऐप विकसित कर रहे हैं, तो आपको इसकी आवश्यकता नहीं है।
— adamczi
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.