簡體   English   中英

Python Flask,如何為靜態文件(js)設置“Content-Type”?

[英]Python Flask, how to set 'Content-Type' for static files (js)?

對於我的 Flask 應用程序,我使用“windows-1251”編碼。 要繪制模板,我將“內容類型”設置如下:

from flask.helpers import make_response

def render_tmpl_dummy():
    response = make_response("Some Russian text here")
    response.headers['Content-Type'] = 'text/html; charset=windows-1251'
    return response

一切都很好。 但是我的靜態 js 文件也在“windows-1251”中。 那么,有沒有辦法設置'Content-Type=application/x-javascript; charset=windows-1251' 'Content-Type=application/x-javascript; charset=windows-1251'用於所有靜態文件? (PS:我不想提前手動轉換成UTF-8,這個方法不適合我)

您的靜態文件不應由Web服務器提供,而應由開發人員提供,因此轉換文件編碼是正確的方法。

如果您不首先轉換文件的原因是由於體積原因,請參閱如何在Python中將文件轉換為utf-8? 看看如何使其自動化。

這就是我如何能夠在開發服務器上為靜態文件夾中具有自定義擴展名的所有文件提供自定義MIME 類型

if __name__ == '__main__':

    CUSTOM_FILE_EXTENSION = '.jsonl'
    CUSTOM_MIME_TYPE = 'application/jsonl+json'

    @flask_app.route(flask_app.static_url_path + '/' + '<path:path>' + CUSTOM_FILE_EXTENSION)
    def jsonl_mime_type(path):
        return flask.send_from_directory(
            directory=flask_app.static_folder,
            path=path + CUSTOM_FILE_EXTENSION,
            mimetype=CUSTOM_MIME_TYPE
        )

實際上,我只是重新發明了 Flask 靜態 Web 服務器,它顯然由在 Flask 構造函數中對 add_url_rule() 的單個調用組成:

        self.add_url_rule(
            f"{self.static_url_path}/<path:filename>",
            endpoint="static",
            host=static_host,
            view_func=lambda **kw: self_ref().send_static_file(**kw),
        )

我遇到了所有這些麻煩,所以開發服務器的行為更像是生產,Apache 有一種更溫和的方式來設置 MIME 類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM