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/" <Directory "C:/Python27/Lib/site-packages/django/contrib/admin/static"> Require all granted </Directory>
正是为了对它进行硬编码。它仍然不会加载 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 提供静态管理文件的主要内容,如果未能解决你的问题,请参考以下文章
Django 1.6 和 django-registration:内置身份验证视图未拾取