django 1.6 使用别名和 apache 提供静态管理文件

Posted

技术标签:

【中文标题】django 1.6 使用别名和 apache 提供静态管理文件【英文标题】:django 1.6 serving static admin files using alias with apache 【发布时间】:2014-10-08 20:42:42 【问题描述】:

所以我将 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/

【问题讨论】:

【参考方案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 个区域可以提供静态文件。首先是管理员,然后是站点静态。

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

【讨论】:

以上是关于django 1.6 使用别名和 apache 提供静态管理文件的主要内容,如果未能解决你的问题,请参考以下文章

1.6 在WHERE子句中引用取别名的列

Django 1.6 和 django-registration:内置身份验证视图未拾取

Django 1.6 - 以编程方式创建组和权限

使用 Django/Django.js 和 WSGIScriptAlias 进行 URL 反向

在 Django 中强制使用 https

Django 1.6 图片上传和媒体路径