使用Flask或Bottle路由静态页面

时间:2018-02-23 16:43:47

标签: python flask bottle

使用时:

@route('/<filename>')
def server_static(filename):
    return static_file(filename, root='.')

它允许使用静态HTML文件www.example.com/helloworld提供请求/myapp/helloworld

如何让www.example.com/anything由静态HTML文件/myapp/html/anything.html提供服务,而无需在Python代码中对每个静态文件名anything进行硬编码?

注意:棘手的部分是请求是/anything(而不是/anything.html),静态文件是/myapp/html/anything.html(有20个或更多此类文件)

1 个答案:

答案 0 :(得分:0)

如果它总是.html,您可以考虑简单地执行filename += '.html'

如果您的需求更复杂,您可以编写检查目录以匹配各种扩展的代码。例如,如果你想匹配.html文件,这样的东西就可以工作,并且可以调整以适应各种/多个扩展或其他条件。

def is_html(filename):
    return filename.lower().endswith('.html')

@route('/<filename>')
def server_static(filename):
    root = '.'
    all_filenames = os.listdir(root)
    html_files = filter(is_html, all_filenames)
    for fname in html_files:
        if fname.startswith(filename):
            return static_file(fname, root=root)
    else:
        return "No such file"

这可以使用fnmatch或类似的东西缩写。

虽然,您可能只想简单地考虑像Apache这样的网络服务器只是提供该路径而不是使用Flask。这也可能是一个更安全的选择。