ফ্লাস্কে স্থির ফাইলগুলি কীভাবে পরিবেশন করা যায়


539

সুতরাং এটি বিব্রতকর। আমি একটি অ্যাপ্লিকেশন পেয়েছি যা আমি একসাথে নিক্ষেপ করেছি Flaskএবং আপাতত এটি কেবলমাত্র সিএসএস এবং জেএস-এর কয়েকটি লিঙ্ক সহ একটি একক স্থিতিশীল HTML পৃষ্ঠা সরবরাহ করছে page এবং আমি খুঁজে পাচ্ছি না যেখানে নথিতে Flaskস্ট্যাটিক ফাইলগুলি ফিরিয়ে আনা হয়েছে describes হ্যাঁ, আমি ব্যবহার করতে পারি render_templateতবে আমি জানি ডেটাটি টেম্পলেটাইজড নয়। আমি ভাবতাম send_fileবা url_forসঠিক জিনিস ছিলাম, তবে আমি সেগুলিতে কাজ করতে পারি না। এর মধ্যে, আমি ফাইলগুলি খুলছি, সামগ্রী পড়ছি এবং Responseউপযুক্ত মাইমটাইপ সহ একটি কারচুপ করবো :

import os.path

from flask import Flask, Response


app = Flask(__name__)
app.config.from_object(__name__)


def root_dir():  # pragma: no cover
    return os.path.abspath(os.path.dirname(__file__))


def get_file(filename):  # pragma: no cover
    try:
        src = os.path.join(root_dir(), filename)
        # Figure out how flask returns static files
        # Tried:
        # - render_template
        # - send_file
        # This should not be so non-obvious
        return open(src).read()
    except IOError as exc:
        return str(exc)


@app.route('/', methods=['GET'])
def metrics():  # pragma: no cover
    content = get_file('jenkins_analytics.html')
    return Response(content, mimetype="text/html")


@app.route('/', defaults={'path': ''})
@app.route('/<path:path>')
def get_resource(path):  # pragma: no cover
    mimetypes = {
        ".css": "text/css",
        ".html": "text/html",
        ".js": "application/javascript",
    }
    complete_path = os.path.join(root_dir(), path)
    ext = os.path.splitext(path)[1]
    mimetype = mimetypes.get(ext, "text/html")
    content = get_file(complete_path)
    return Response(content, mimetype=mimetype)


if __name__ == '__main__':  # pragma: no cover
    app.run(port=80)

কেউ এর জন্য একটি কোড নমুনা বা url দিতে চান? আমি জানি এটি মৃত সহজ হতে চলেছে।


6
স্থির ফাইল পরিবেশন করার জন্য কেন এনগিনেক্স বা অন্যান্য ওয়েব সার্ভার ব্যবহার করবেন না।
অটুপাল

8
দয়া করে মনে রাখবেন আপনি কীভাবে ফাইলগুলি "পরিবেশন" করছেন সম্ভবত উত্পাদন (আপনার ওয়েব সার্ভারে) এবং বিকাশের (আপনার স্থানীয় কম্পিউটারে, বা অন্য কোনও পরীক্ষার ক্ষেত্রের) মধ্যে পার্থক্য হবে। কিছু উত্তর নির্দেশিত হয়েছে, আপনি সম্ভবত ফ্ল্যাশ দিয়ে আপনার স্ট্যাটিক ফাইল পরিবেশন করতে চাইবেন না, পরিবর্তে সেগুলি তাদের নিজস্ব ডিরেক্টরিতে রেখে তারপরে আপনার প্রকৃত ওয়েব সার্ভার (অ্যাপাচি, এনজিনেক্স, ইত্যাদি) সরাসরি সেই ফাইলগুলি সার্ভার করুন।
মার্ক হিলড্রেথ


75
"কেন এনগিনেক্স ব্যবহার করবেন না ..." কারণ যখন আমি এটি আমার ল্যাপটপে ডেভেলপার মোডে চালাচ্ছি তখন কেবল একটি জিনিস চালানো দরকার এবং কেবল একটি জিনিস। হ্যাঁ, এটি জিনিসগুলিকে আলাদা করে তোলে তবে ঠিক আছে।
থানাটোস

1
এমনকি উত্পাদনেও এটি দেখতে খুব সাধারণ, অবশ্যই সামনে একটি ক্যাশে স্তর (যেমন বার্নিশ বা এনগিনেক্স বা সিডিএন)।
থমাস ডেকাউস

উত্তর:


642

পছন্দসই পদ্ধতিটি হ'ল স্থির ফাইলগুলি পরিবেশন করার জন্য এনগিনেক্স বা অন্য কোনও ওয়েব সার্ভার ব্যবহার করা; তারা এটি ফ্লাস্কের চেয়ে আরও দক্ষতার সাথে করতে সক্ষম হবেন।

তবে আপনি send_from_directoryকোনও ডিরেক্টরি থেকে ফাইলগুলি প্রেরণ করতে ব্যবহার করতে পারেন যা কিছু পরিস্থিতিতে বেশ সুবিধাজনক হতে পারে:

from flask import Flask, request, send_from_directory

# set the project root directory as the static folder, you can set others.
app = Flask(__name__, static_url_path='')

@app.route('/js/<path:path>')
def send_js(path):
    return send_from_directory('js', path)

if __name__ == "__main__":
    app.run()

না না ব্যবহার send_fileবা send_static_fileব্যবহারকারী-সরবরাহকৃত পাথ উল্লেখ করুন।

send_static_file উদাহরণ:

from flask import Flask, request
# set the project root directory as the static folder, you can set others.
app = Flask(__name__, static_url_path='')

@app.route('/')
def root():
    return app.send_static_file('index.html')

12
উইন্ডোজ সমর্থন করতে: app.send_static_file (os.path.join ('জেএস', পথ) .রেপ্লেস ('\\', '/'))
ফেরান

9
কোনও আক্রমণকারী কি "../ yourflaskapp.py"> এর কিছু চতুর এনকোডিং ব্রাউজ করে ফ্ল্যাশ সোর্স ফাইলগুলি ব্রাউজ করতে এই পদ্ধতিটি কাজে লাগাতে পারেন?
আকিভা

30
@ কুই send_from_directoryএই সুরক্ষা সমস্যাটি সমাধান করার জন্য তৈরি করা হয়েছে। পাথটি যদি নির্দিষ্ট ডিরেক্টরিটির বাইরের দিকে নিয়ে যায় তবে তা ত্রুটি থেকে বেরিয়ে আসে।
jpmc26

10
"ব্যবহারকারী সরবরাহিত পাথ দিয়ে সেন্ড_ফাইল বা সেন্ড_স্ট্যাটিক_ফায়াল ব্যবহার করবেন না।" কেন না?
ড্রু ভার্লি

6
@ ডেনিসভের প্রতি পাই-পাইথনের সাথে এর কোনও যোগসূত্র নেই, এটি ইউআরএল প্যারামিটারগুলি সংজ্ঞায়নের জন্য ফ্লাস্ক কনভেনশন ( http://flask.pocoo.org/docs/0.12/api/#url-route-registration দেখুন )। সংক্ষেপে <path>এটি সমতুল্য <string:path>, এবং যেহেতু আপনি চান যে ফ্লাস্ক আপনার কাছে জিজ্ঞাসা করা কোনও পাথের মতো প্যারামিটার নিশ্চিত করতে পারে <path:path>
b4stien

135

যদি আপনি কেবল আপনার স্থির ফাইলগুলির অবস্থান সরাতে চান তবে সহজ পদ্ধতিটি হল কনস্ট্রাক্টরের পাথগুলি ঘোষণা করা। নীচের উদাহরণে, আমি আমার টেমপ্লেট এবং স্থিতিশীল ফাইলগুলি উপ-ফোল্ডারে ডেকে আছি web

app = Flask(__name__,
            static_url_path='', 
            static_folder='web/static',
            template_folder='web/templates')
  • static_url_path=''URL (পূর্বনির্ধারিত /static) থেকে পূর্বের কোনও পাথ সরিয়ে দেয় ।
  • static_folder='web/static'ফোল্ডারে থাকা কোনও ফাইল web/staticস্থিতিশীল ফাইল হিসাবে পরিবেশন করতে।
  • template_folder='web/templates' একইভাবে, এটি টেমপ্লেট ফোল্ডার পরিবর্তন করে।

এই পদ্ধতিটি ব্যবহার করে, নিম্নলিখিত URL টি একটি CSS ফাইল ফেরত দেবে:

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

এবং অবশেষে, এখানে ফোল্ডার কাঠামোর একটি স্ন্যাপ এখানে flask_server.pyফ্লাস্ক উদাহরণ:

নেস্টেড স্ট্যাটিক ফ্লাস্ক ফোল্ডার


9
এটি আমার পক্ষেও কাজ করেছিল। Send_from_directory এর জন্য সমস্ত সুপারিশ সত্ত্বেও ঠিক কাজ করে না work
জিএ

নিখুঁত কাজ করে। আপনাকে অনেক ধন্যবাদ <3।
থুয়াত এনগুইন

পথটি কেমন দেখাচ্ছে? get_static_file('index.html')?
ব্যাটম্যান

এটি ভালভাবে কাজ করে, যেমন জিএ বলেছিল, আমার পক্ষে আর কিছুই কাজ করে নি এবং এটি সব ঠিক করে দিয়েছে। অনেক প্রশংসা করেছেন
অ্যান্ড্রে স্টারেঙ্কি

81

আপনিও করতে পারেন এবং এটি আমার প্রিয়, স্থির পথ হিসাবে একটি ফোল্ডার সেট করুন যাতে ভিতরে থাকা ফাইলগুলি সবার কাছে পৌঁছতে পারে।

app = Flask(__name__, static_url_path='/static')

এই সেটটি দিয়ে আপনি স্ট্যান্ডার্ড এইচটিএমএল ব্যবহার করতে পারেন:

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

4
ফাইল project/static/style.cssউপলব্ধ থাকলে ভাল কাজ করে ।
পাভেল ভ্লাসভ

6
"অ্যাপ্লিকেশন = ফ্লাস্ক (....)" রেখার প্যারামিটার হওয়ার জন্য "স্ট্যাটিক_ফোল্ডার" দরকার
ডাটদিনহোকোক

আমি কয়েক ঘন্টা ধরে এই সমস্যা নিয়ে লড়াই করে যাচ্ছি! আমি কেবল একটি যুক্তি মিস করছি!
যৌক্তিক ব্রাঞ্চ

78

আমি নিশ্চিত যে আপনি সেখানে যা চান তা পেয়ে যাবেন: http://flask.pocoo.org/docs/quickstart/#static-files

মূলত আপনার প্যাকেজটির মূলে আপনার কেবল একটি "স্ট্যাটিক" ফোল্ডার প্রয়োজন এবং তারপরে আপনি http://example.com/static/foo.bar এরurl_for('static', filename='foo.bar') সাহায্যে আপনার ফাইলগুলিতে সরাসরি লিঙ্ক করতে পারেন ।

সম্পাদনা : মন্তব্যে যেমন পরামর্শ দেওয়া হয়েছে আপনি সরাসরি '/static/foo.bar'ইউআরএল পাথ ইউটিউব পাথ ব্যবহার করতে পারবেন তবে url_for()ওভারহেড (পারফরম্যান্স ওয়াইস) বেশ কম, এবং এর ব্যবহারের অর্থ আপনি সহজেই পরে আচরণটি কাস্টমাইজ করতে সক্ষম হবেন (ফোল্ডারটি পরিবর্তন করুন, ইউআরএল পথ পরিবর্তন করুন, আপনার স্ট্যাটিক ফাইলগুলিকে এস 3 এ সরিয়ে দিন)।


14
'/static/foo.bar'সরাসরি কেন নয় ?
টাইলার দীর্ঘ

3
@ টাইলারলং সঠিক - আপনি যদি ইতিমধ্যে আপনার স্ট্যাটিক ডিরেক্টরিতে সংরক্ষিত কোনও ফাইলের সাথে লিঙ্ক করতে চান তবে কোনও রুট কোড ছাড়াই আপনি সরাসরি এটিতে লিঙ্ক করতে পারেন।
hamx0r

42

আপনি এই ফাংশনটি ব্যবহার করতে পারেন:

send_static_file(filename)
স্থিতিশীল ফাইলগুলি ব্রাউজারে স্থির ফাইলগুলি প্রেরণের জন্য অভ্যন্তরীণভাবে ব্যবহৃত ফাংশন।

app = Flask(__name__)
@app.route('/<path:path>')
def static_file(path):
    return app.send_static_file(path)

1
এই একমাত্র তিনিই আমার পক্ষে বড় মাথা ব্যথা ছাড়াই কাজ করেছিলেন।
কেনি পাওয়ারগুলি

একই। যেখানে আমি বুঝতে পারি ফ্ল্যাশটি এই ধারণার উপর অনেক বেশি নির্ভর করে যে আমরা তাদের টেম্পলেট সিস্টেমটি ব্যবহার করব, এমন কোনও আরআইএ নয় যেখানে এইচটিএমএল অন্য কোথাও উত্পাদিত হয়েছে।
নিকো

15
সতর্কতা: এটি send_static_fileব্যবহারকারী ইনপুট সহ কল করার জন্য এটি একটি বিশাল সুরক্ষা উদ্বেগ । গুরুত্বপূর্ণ কোনও ক্ষেত্রে এই সমাধানটি ব্যবহার করবেন না।
এক্সএপল

41

আমি যা ব্যবহার করি (এবং এটি দুর্দান্ত কাজ করে চলেছে) এটি একটি "টেম্পলেট" ডিরেক্টরি এবং একটি "স্ট্যাটিক" ডিরেক্টরি। আমি আমার সমস্ত .html ফাইল / ফ্লাস্ক টেম্পলেটগুলি টেম্পলেট ডিরেক্টরিতে রাখি এবং স্থিতিতে সিএসএস / জেএস থাকে। আপনি যে পরিমাণে ফ্লাস্কের টেম্প্লেটিং সিনট্যাক্স ব্যবহার করেছেন তা নির্বিশেষে রেন্ডার_টেমপ্লেট জেনেরিক এইচটিএমএল ফাইলগুলির জন্য আমার জ্ঞানের পক্ষে সূক্ষ্ম কাজ করে। নীচে আমার ভিউ.পি ফাইলে একটি নমুনা কল রয়েছে।

@app.route('/projects')
def projects():
    return render_template("projects.html", title = 'Projects')

আপনি পৃথক স্ট্যাটিক ডিরেক্টরিতে কিছু স্থির ফাইলের রেফারেন্স দিতে চাইলে আপনি url_for () ব্যবহার করেছেন তা নিশ্চিত করুন। আপনি সম্ভবত এইচটিএমএল আপনার সিএসএস / জেএস ফাইল লিঙ্কে এই কাজ শেষ করতে হবে। এই ক্ষেত্রে...

<script src="{{ url_for('static', filename='styles/dist/js/bootstrap.js') }}"></script>

এখানে "প্রচলিত" অনানুষ্ঠানিক ফ্লাস্ক টিউটোরিয়ালটির একটি লিঙ্ক রয়েছে - আপনাকে দৌড়তে দৌড়তে সহায়তা করতে এখানে প্রচুর দুর্দান্ত টিপস রয়েছে।

http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i-hello-world


38

অন্যান্য উত্তরের উপর ভিত্তি করে একটি সর্বাধিক কার্যকারী উদাহরণ নিম্নরূপ:

from flask import Flask, request
app = Flask(__name__, static_url_path='')

@app.route('/index/')
def root():
    return app.send_static_file('index.html')

if __name__ == '__main__':
  app.run(debug=True)

সঙ্গে এইচটিএমএল নামক index.html :

<!DOCTYPE html>
<html>
<head>
    <title>Hello World!</title>
</head>
<body>
    <div>
         <p>
            This is a test.
         </p>
    </div>
</body>
</html>

গুরুত্বপূর্ণ: এবং index.html স্ট্যাটিক নামে একটি ফোল্ডারে <projectpath>রয়েছে যার অর্থ .pyফাইল <projectpath>\staticরয়েছে এবং এতে htmlফাইল রয়েছে।

আপনি যদি চান যে সার্ভারটি নেটওয়ার্কে দৃশ্যমান হয় তবে ব্যবহার করুন app.run(debug=True, host='0.0.0.0')

সম্পাদনা: যদি অনুরোধ করা হয় ফোল্ডারে সমস্ত ফাইল দেখানোর জন্য, এটি ব্যবহার করুন

@app.route('/<path:path>')
def static_file(path):
    return app.send_static_file(path)

যা মূলত BlackMamba উত্তর, তাই তাদের একটি সমালোচনা দিন।


গুরুত্বপূর্ণ পর্যবেক্ষণের জন্য ধন্যবাদ!
গ্লাইডসন কার্ডোসো দা সিলভা

13

কৌণিক + বয়লারপ্লেট প্রবাহের জন্য যা পরবর্তী ফোল্ডার গাছ তৈরি করে:

backend/
|
|------ui/
|      |------------------build/          <--'static' folder, constructed by Grunt
|      |--<proj           |----vendors/   <-- angular.js and others here
|      |--     folders>   |----src/       <-- your js
|                         |----index.html <-- your SPA entrypoint 
|------<proj
|------     folders>
|
|------view.py  <-- Flask app here

আমি নিম্নলিখিত সমাধান ব্যবহার:

...
root = os.path.join(os.path.dirname(os.path.abspath(__file__)), "ui", "build")

@app.route('/<path:path>', methods=['GET'])
def static_proxy(path):
    return send_from_directory(root, path)


@app.route('/', methods=['GET'])
def redirect_to_index():
    return send_from_directory(root, 'index.html')
...

এটি কাস্টমতে 'স্ট্যাটিক' ফোল্ডারটির নতুন সংজ্ঞা দিতে সহায়তা করে।


আপনার উত্তর আমি এটা করেছি উপর ভিত্তি করে: stackoverflow.com/a/29521067/303114 নোটিশ আমি 'add_url_rule' intead 'রুট' যা basicly পর্যন্ত একই ব্যবহৃত
danfromisrael

7

তাই আমি কাজ করার জিনিসগুলি পেয়েছি (@ ব্যবহারকারী1671599 উত্তরের উপর ভিত্তি করে) এবং এটি আপনার সাথে ভাগ করে নিতে চাই।

(আমি আশা করি পাইথনে এটি আমার প্রথম অ্যাপ্লিকেশন হওয়ায় আমি এটি ঠিকঠাক করছি)

আমি এটা করেছি -

প্রকল্প কাঠামো:

এখানে চিত্র বর্ণনা লিখুন

server.py:

from server.AppStarter import AppStarter
import os

static_folder_root = os.path.join(os.path.dirname(os.path.abspath(__file__)), "client")

app = AppStarter()
app.register_routes_to_resources(static_folder_root)
app.run(__name__)

AppStarter.py:

from flask import Flask, send_from_directory
from flask_restful import Api, Resource
from server.ApiResources.TodoList import TodoList
from server.ApiResources.Todo import Todo


class AppStarter(Resource):
    def __init__(self):
        self._static_files_root_folder_path = ''  # Default is current folder
        self._app = Flask(__name__)  # , static_folder='client', static_url_path='')
        self._api = Api(self._app)

    def _register_static_server(self, static_files_root_folder_path):
        self._static_files_root_folder_path = static_files_root_folder_path
        self._app.add_url_rule('/<path:file_relative_path_to_root>', 'serve_page', self._serve_page, methods=['GET'])
        self._app.add_url_rule('/', 'index', self._goto_index, methods=['GET'])

    def register_routes_to_resources(self, static_files_root_folder_path):

        self._register_static_server(static_files_root_folder_path)
        self._api.add_resource(TodoList, '/todos')
        self._api.add_resource(Todo, '/todos/<todo_id>')

    def _goto_index(self):
        return self._serve_page("index.html")

    def _serve_page(self, file_relative_path_to_root):
        return send_from_directory(self._static_files_root_folder_path, file_relative_path_to_root)

    def run(self, module_name):
        if module_name == '__main__':
            self._app.run(debug=True)

: ভাল করে বুঝতে আপনি এই উত্তর পড়তে পারেন জন্য stackoverflow.com/a/23501776/303114 (যা আপনি GitHub মধ্যে উৎস পয়েন্ট)
danfromisrael

6

করার একটি সহজ উপায়। চিয়ার্স!

demo.py

from flask import Flask, render_template
app = Flask(__name__)

@app.route("/")
def index():
   return render_template("index.html")

if __name__ == '__main__':
   app.run(debug = True)

এখন ফোল্ডার নাম টেমপ্লেট তৈরি করুন । টেম্পলেট ফোল্ডারের অভ্যন্তরে আপনার সূচিপত্র। Html ফাইল যুক্ত করুন

index.html

<!DOCTYPE html>
<html>
<head>
    <title>Python Web Application</title>
</head>
<body>
    <div>
         <p>
            Welcomes You!!
         </p>
    </div>
</body>
</html>

প্রকল্পের কাঠামো

-demo.py
-templates/index.html

আপনি প্রশ্নটি পড়েন নি আমি স্পষ্টভাবে বলেছি আমি render_templateসমাধান সম্পর্কে সচেতন ছিলাম তবে এটি করতে চাইনি কারণ ফাইলটি কোনও প্রতিস্থাপন ছাড়াই স্থির ছিল: "হ্যাঁ, আমি রেন্ডার_টেমপ্লেট ব্যবহার করতে পারতাম তবে আমি জানি যে তথ্যটি অস্থির নয়" "
হিউডব্রাউন 15

উইন্ডোজে সহজেই কাজ করা একমাত্র সমাধান, ধন্যবাদ!
বসজ

4

ভাগ করে নেওয়ার কথা ভাবা .... এই উদাহরণ।

from flask import Flask
app = Flask(__name__)

@app.route('/loading/')
def hello_world():
    data = open('sample.html').read()    
    return data

if __name__ == '__main__':
    app.run(host='0.0.0.0')

এটি আরও ভাল এবং সাধারণ কাজ করে।


আপনি কিভাবে দয়া করে এই কাজটি আরও ভাল করে বর্ণনা করতে পারেন?
আরশো

1
lmao অন্যান্য প্রতিটি পদ্ধতি আমাকে কিছু বিরক্তিকর ফাইল দেয় ত্রুটিগুলি পাওয়া যায় নি। সুন্দর 1 জীবন
দিমিত্রি ডিবি

3

ব্যবহার করুন redirectএবংurl_for

from flask import redirect, url_for

@app.route('/', methods=['GET'])
def metrics():
    return redirect(url_for('static', filename='jenkins_analytics.html'))

এটি আপনার এইচটিএমএল এ রেফারেন্সযুক্ত সমস্ত ফাইল (সিএসএস ও জেএস ...) সার্ভার করে।


2

সবচেয়ে সহজ উপায় হ'ল মূল প্রকল্প ফোল্ডারের অভ্যন্তরে একটি স্ট্যাটিক ফোল্ডার তৈরি করা। স্ট্যাটিক ফোল্ডার .css ফাইল সমন্বিত।

মুল ফোল্ডার

/Main Folder
/Main Folder/templates/foo.html
/Main Folder/static/foo.css
/Main Folder/application.py(flask script)

স্ট্যাটিক এবং টেমপ্লেট ফোল্ডার এবং ফ্লেস্ক স্ক্রিপ্টযুক্ত মূল ফোল্ডারের চিত্র

ফ্লাস্ক

from flask import Flask, render_template

app = Flask(__name__)

@app.route("/")
def login():
    return render_template("login.html")

এইচটিএমএল (বিন্যাস)

<!DOCTYPE html>
<html>
    <head>
        <title>Project(1)</title>
        <link rel="stylesheet" href="/static/styles.css">
     </head>
    <body>
        <header>
            <div class="container">
                <nav>
                    <a class="title" href="">Kamook</a>
                    <a class="text" href="">Sign Up</a>
                    <a class="text" href="">Log In</a>
                </nav>
            </div>
        </header>  
        {% block body %}
        {% endblock %}
    </body>
</html>

এইচটিএমএল

{% extends "layout.html" %}

{% block body %}
    <div class="col">
        <input type="text" name="username" placeholder="Username" required>
        <input type="password" name="password" placeholder="Password" required>
        <input type="submit" value="Login">
    </div>
{% endblock %}

2
app = Flask(__name__, static_folder="your path to static")

যদি আপনার মূল ডিরেক্টরিতে টেমপ্লেট থাকে, অ্যাপ্লিকেশন = ফ্লাস্ক ( নাম ) স্থাপন করা কাজ করবে যদি এটিতে থাকা ফাইলটি একই স্থানে থাকে তবে এই ফাইলটি অন্য কোনও স্থানে থাকলে আপনাকে সক্ষম করতে টেমপ্লেটের অবস্থান নির্দিষ্ট করতে হবে অবস্থানটি নির্দেশ করতে ফ্লাস্ক


4
এটি কেন কাজ করে তার জন্য আপনি কিছু ব্যাখ্যা সরবরাহ করতে পারেন?
অর্থনীতি

1
এই উত্তরটি কীভাবে পৃথক হয় যা ব্যাখ্যা সরবরাহ করে?
জিনো মেম্পিন

আমি আমার উত্তরটির জন্য একটি ব্যাখ্যা অফার করেছি
একনোমি

1

সমস্ত উত্তরগুলি ভাল তবে আমার পক্ষে যা ভালভাবে কাজ করেছে তা হ'ল send_fileফ্লাস্কের সাধারণ ফাংশনটি ব্যবহার করা । হোস্ট করার সময় আপনার যখন এইচটিএমএল ফাইলটি প্রতিক্রিয়া হিসাবে প্রেরণ করা দরকার তখন এটি ভালভাবে কাজ করে : পোর্ট / এপিএনএম ব্রাউজারে ফাইলটির আউটপুট প্রদর্শন করবে


@app.route('/ApiName')
def ApiFunc():
    try:
        return send_file('some-other-directory-than-root/your-file.extension')
    except Exception as e:
        logging.info(e.args[0])```

0

   ডিফল্টরূপে, ফ্ল্যাশ আপনার সমস্ত টেম্পলেট ফাইল (কোনও সমতল পাঠ্য ফাইল, তবে সাধারণত .htmlবা কিছু ধরণের টেম্পলেট ভাষা যেমন জিনজা 2) এবং একটি "স্ট্যাটিক" ফোল্ডার আপনার সমস্ত স্ট্যাটিক ফাইল ধারণ করতে (যেমন .js .cssএবং আপনার ছবি)।
   আপনার মধ্যে routes, আপনি আপনার অনুরোধের প্রতিক্রিয়া হিসাবে render_template()একটি টেম্পলেট ফাইল রেন্ডার করতে (যেমন আমি উপরে বলেছি, ডিফল্টরূপে এটি templatesফোল্ডারে রাখা হয়েছে ) ব্যবহার করতে পারেন। এবং টেমপ্লেট ফাইলে (এটি সাধারণত একটি .html- এর মতো ফাইল) থাকে তবে আপনি কিছু .jsএবং / অথবা c .css 'ফাইল ব্যবহার করতে পারেন , সুতরাং আমার ধারণা আপনার প্রশ্নটি কীভাবে আপনি এই স্ট্যাটিক ফাইলগুলিকে বর্তমান টেম্পলেট ফাইলের সাথে সংযুক্ত করেন।


0

আপনি যদি কেবল একটি ফাইল খোলার চেষ্টা করছেন তবে আপনি এটি ব্যবহার করতে পারেন app.open_resource()। সুতরাং একটি ফাইল পড়া কিছু দেখতে হবে

with app.open_resource('/static/path/yourfile'):
      #code to read the file and do something
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.