【问题标题】:Serving static media in django application在 django 应用程序中提供静态媒体
【发布时间】:2011-06-02 12:10:40
【问题描述】:

我注意到,当我从模板中引用我的 java 脚本和静态图像文件时,它们会出现在开发中,但不会出现在生产服务器中。从开发中,我这样访问它们:

<img src="/my_proj/media/css/images/collapsed.png" />

但是从生产中,我必须删除项目目录:

<img src="/media/css/images/collapsed.png" />

我假设我在提供静态媒体方面做错了。

我在 Django 中提供静态媒体的许多看似不同的选项之间陷入了困境。一方面,建议我使用django-staticfiles 来服务媒体。另一方面,我在文档中看到了对STATIC_ROOT and STATIC_URL 的引用(带有关于在生产中使用的警告)。

我有一些“加号”和“减号”符号的 .png 小文件可用于我的一些 jQuery 脚本。此外,脚本本身也需要被引用。

1) 我是否将脚本和网站图片正确归类为静态媒体?
2) 访问此媒体(从生产)的最佳方法是什么?

【问题讨论】:

    标签: django


    【解决方案1】:

    您不应该以这种方式对 URL 进行硬编码。

    如果你运行的是开发版的 Django,你应该check this doc。

    如果您不是,为简单起见,您可以使用 {{ MEDIA_URL }} 并在您的设置中为开发和生产配置该变量。

    <img src="{{ MEDIA_URL }}/media/css..." />
    

    请记住,您必须使用 RequestContext、see more here on docs here 和 here。

    此外,您应该通过适当的网络服务器直接提供所有静态文件。您可以配置 apache 或 nginx 来执行此操作。

    【讨论】:

      【解决方案2】:

      叹息。只有一种方法可以在生产中提供静态媒体服务,那就是让网络服务器(例如 Apache)来做这件事。 Django-staticfiles 仅用于开发,这在整个文档中都有明确说明。

      【讨论】:

        猜你喜欢
        • 2016-07-19
        • 2023-03-25
        • 1970-01-01
        • 2018-07-20
        • 1970-01-01
        • 2012-10-29
        • 2012-07-07
        • 2020-09-11
        • 1970-01-01
        相关资源
        最近更新 更多