Python Flask,如何为静态文件(js)设置“Content-Type”?

4

对于我的Flask应用程序,我使用'windows-1251'编码。为了绘制模板,我设置'Content-Type'如下:

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'呢?(注:我不想提前手动将它们转换为UTF-8,这种方法不适合我)


没有冒犯的意思,但为什么选择Win1251编码? - Zaur Nasibov
遗留代码...父项目已经使用win1251超过5年了。 - Alex Che
2个回答

0

这是我在开发服务器上如何为静态文件夹中所有具有自定义扩展名的文件提供自定义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类型。


-1

你的静态文件不应该在开发以外的 Web 服务器上提供服务,因此转换文件编码是正确的方法。

如果你不先转换文件的原因是由于数量过多,请参考如何在 Python 中将文件转换为 utf-8?了解如何自动化处理。


我不太喜欢转换文件,因为这些文件是从父项目中获取的。实际上,这个项目是父项目的一个截断部分,只有一个小的具体任务。这就是为什么我使用Flask及其Web服务器进行“生产”的原因。 - Alex Che
这应该作为注释。它提供了一个可能的解决方案,比它所值得的更加确定。 - Bob Stein

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接