hob*_*es3 6 python apache django django-templates django-staticfiles
Django建议我,如果我只使用一台服务器(Apache)来提供动态和静态文件,那么我应该使用静态文件django.contrib.staticfiles.
所以在我,settings.py我已经加载django.contrib.staticfiles到我INSTALLED_APPS和django.core.context_processors.static我的TEMPLATE_CONTEXT_PROCESSORS.
我注意到在管理模板中它链接到这样的静态文件(来自index.html):
{% load i18n admin_static %}
{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/dashboard.css" %}" />{% endblock %}
Run Code Online (Sandbox Code Playgroud)
但是看一下模板标签admin_static,它只是一个包装器static:
from django.conf import settings
from django.template import Library
register = Library()
if 'django.contrib.staticfiles' in settings.INSTALLED_APPS:
from django.contrib.staticfiles.templatetags.staticfiles import static
else:
from django.templatetags.static import static
static = register.simple_tag(static)
Run Code Online (Sandbox Code Playgroud)
所以我得出结论,因为每个管理静态文件都是带有admin/...前缀的服务器,那么完整路径(对于我的情况)应该是
/usr/lib64/python2.7/site-packages/django/contrib/admin/static
Run Code Online (Sandbox Code Playgroud)
所以我将该路径设置为我的STATICFILES_DIRS内部settings.py,但Apache仍然不会提供任何静态文件(在重新启动服务器之后).我的逻辑在哪里犯了错误?
感谢Daniel Roseman的解释并让我有机会自己学习(现在我不会忘记!):-).
最初我真的很困惑,我不知道你必须先收集静态文件,然后告诉Apache 服务它.我认为简单地使用STATICFILES_DIRS和包括static应用程序settings.py就足够了.
所以这就是我如何做到的(如果我能做得更好,请告诉我):
在 settings.py
STATIC_ROOT = '/var/www/localhost/htdocs/mysite/static/'
STATIC_URL = '/static/' # default
Run Code Online (Sandbox Code Playgroud)
似乎Django已经知道在哪里收集管理文件,你不需要指定任何内容,STATICFILES_DIRS除非你需要提供自己的自定义文件(我不这样做,因此我之前没有使用Django中的静态文件).
然后在/var/www/localhost/htdocs/mysite/类型python manage.py collectstatic -l.的-l手段来创造一个符号链接找到的所有静态文件,而不是复制过来(可以节省一些空间).
接下来编辑Apache配置文件(通常httpd.conf)并添加STATIC_URL信息.我的Django配置文件如下所示:
Alias /static/ /var/www/localhost/htdocs/mysite/static/
#In the form of...
#Alias STATIC_URL STATIC_ROOT
<Directory /var/www/localhost/htdocs/mysite/static>
Order deny,allow
Allow from all
</Directory>
WSGIScriptAlias / /var/www/localhost/htdocs/mysite/mysite/wsgi.py
WSGIPythonPath /var/www/localhost/htdocs/mysite
<Directory /var/www/localhost/htdocs/mysite/mysite>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
Run Code Online (Sandbox Code Playgroud)
然后重启Apache并完成!
| 归档时间: |
|
| 查看次数: |
6710 次 |
| 最近记录: |