【问题标题】:django 1.6 serving static admin files using alias with apachedjango 1.6 使用别名和 apache 提供静态管理文件
【发布时间】:2026-01-21 04:15:01
【问题描述】:

所以我将 Django 教程转换为完全使用 Apache,而不是使用内置的“runserver”命令。我的第一步开始工作了;让 Apache 提供静态文件 (css)。现在我需要让它为管理员提供静态文件。

到目前为止,我的代码在 Apache 2.4 的 httpd.conf 文件中。

#static files for site
Alias /static/ "C:/mysite/polls/static/"
<Directory "C:/mysite/polls/static">
Require all granted
</Directory>

#static files for admin
Alias /static/ "C:/Python27/Lib/site-packages/django/contrib/admin/static/"
<Directory "C:/Python27/Lib/site-packages/django/contrib/admin/static">
Require all granted
</Directory>

显然,第二个块使用相同的别名不起作用,并且 CSS 不会为管理员加载。该网站(第一个街区)加载良好。现在,Django 教程中的这个页面详细介绍了如何使其工作的整个过程。我就是想不通。也许我在做一个语法错误,我在这里和其他地方读过无数关于这个的帖子。

文档提到了 3 种方法。我想用第二种方法;通过使用别名指令:“使用别名指令,如上所示,将适当的 URL(可能是 STATIC_URL + admin/)别名为管理文件的实际位置。”

现在我不明白它说“STATIC_URL + admin/”的确切部分。我尝试了各种变体,但它不起作用。我到管理页面的链接正是这样的: http://127.0.0.1/admin/

我们能否针对 WINDOWS 和 DJANGO 1.6 解决这个问题?我知道在 DJANGO 1.4 之前,有一种在 settings.py 文件中使用“ADMIN_MEDIA_PREFIX”的不同方式。现在不推荐使用这种方式,我想使用别名。和奖金。别名究竟是如何工作的?

谢谢大家。

编辑: 提到如何做的链接。在“提供管理文件”下,我需要找出使用别名的第二种方式。 https://docs.djangoproject.com/en/1.6/howto/deployment/wsgi/modwsgi/

【问题讨论】:

    标签: django apache


    【解决方案1】:

    这就是“静态”应用的用途。您应该在部署时执行manage.py collectstatic,这会将您的所有静态内容(包括您的应用程序和内置/contrib 的)收集到一个位置,即您将 Apache 别名指向的位置。

    但如果你真的想硬编码,STATIC_URL + admin 就是这个意思:STATIC_URL 的值,后缀为“admin”,所以Alias /static/admin

    【讨论】:

    • Alias /static/admin "C:/Python27/Lib/site-packages/django/contrib/admin/static/" &lt;Directory "C:/Python27/Lib/site-packages/django/contrib/admin/static"&gt; Require all granted &lt;/Directory&gt; 正是为了对它进行硬编码。它仍然不会加载 CSS。有点不对劲……
    • 不过,我不明白您为什么不使用 collectstatic。正是为了解决这个问题。
    • 我将使用它来部署。我只想使用 Apache 而不是 Django 的服务器进行开发。这只是一个开发环境,而不是用于产品。感谢您的建议,我学到了一点。
    【解决方案2】:

    这是最终起作用的代码:

    Alias /static/admin "C:/Python27/Lib/site-packages/django/contrib/admin/static/admin/"
    <Directory "C:/Python27/Lib/site-packages/django/contrib/admin/static/admin">
    Require all granted
    </Directory>
    
    Alias /static/ "C:/mysite/polls/static/"
    <Directory "C:/mysite/polls/static">
    Require all granted
    </Directory>
    

    请注意,订单非常重要。在为站点静态别名之前,我必须先别名管理员静态。听起来像是级联类型的问题,越具体越有道理。

    我的管理员链接也不正确。它以 ../admin/static/ 结尾。它应该深入到 ../admin/static/admin/.

    最后有 2 个区域可以提供静态文件。首先是管理员,然后是站点静态。

    感谢大家,这应该真正记录在案,对某些人来说可能是一个陷阱。

    【讨论】: