फ्लास् स्टेटिक फाइल्स को 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.