【问题标题】:Serve static HTML in Django在 Django 中提供静态 HTML
【发布时间】:2026-01-28 16:45:01
【问题描述】:

我对 Django 很陌生,所以如果这是我什至不应该考虑的事情,请原谅我,但我希望我的应用能够链接到大量静态 HTML 页面(足以创建 URL 路径对每个人都是不合理的)并且会不断上传更多内容(我通过 FTP 上传)。

通过将这些 HTML 文件的路径添加到我的STATICFILES_DIRS [],我已经在开发服务器上进行了这项工作,但是当我将代码推送到生产环境时,这似乎不起作用。

我尝试设置 STATIC_ROOT 并运行 collectstatic 但没有帮助,而且我还担心即使我能正常工作,每次上传新文件时我都必须运行 collectstatic。

所以我的问题是,这是否合理?我是否应该避免将这些静态 HTML 文件与我的项目一起托管,并将它们留在现在所在的位置,在单独的域下的单独服务器上?

我最初想将它们托管在一起的唯一原因是,除了静态 HTML 文件之外,还有一个 SQL LITE 数据库,我的 Django 应用程序显示数据来自(这是我的应用程序的全部目的)。但是,我可以实现另一种获取 SQL LITE 文件的方法,例如使用ftlib。请注意,我根本不需要那个数据库来连接到 Django - 我只需要从中读取数据。

【问题讨论】:

    标签: django python-3.x


    【解决方案1】:

    您不需要为每个页面编写 url。您可以从 url 中“捕获”请求的页面名称,并根据其值呈现页面。

    # urls.py
    url(r'^page/(?P<page_name>\w+)/$', my_view)
    
    
    # views.py
    import os
    from django.http import HttpResponse, Http404
    
    FTP_UPLOAD_DIR = '/path/to/directory/where/you/upload/files/'
    
    
    def my_view(request, page_name):
    
        # check if requested page exists
        if os.path.exists(FTP_UPLOAD_DIR + page_name):
            # if yes, then serve the page
            with open(FTP_UPLOAD_DIR + page_name) as f:
                response = HttpResponse(f.read())
            return response
    
        else:
            raise Http404
    

    以上,我们是直接从上传文件夹中读取文件,所以你不需要运行collectstatic

    【讨论】:

    • 非常感谢您的快速回复。您的解决方案有效,并且由于 Django 2.0 让我摆脱了我最大的编程恐惧(正则表达式),我使用了“路径”而不是“url”并使用了内置的路径转换器。花了一些时间才弄清楚,但您的代码是一个很好的起点。再次感谢!