作为基础,首先当然是要修改settings.py中的设置,主要是要修改以下内容
import os, socket
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
# many many other settings
# 静态文件在生产环境中的存储位置
STATIC_ROOT = '/var/www/yoursite/static/'
# 静态文件的URL
STATIC_URL = '/static/'
# Django 应该在哪些位置寻找静态文件
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"),
)
# 静态文件收集引擎,如果静态文件与Django在同一台服务器上,则不用设置
# 此时将使用默认引擎将静态文件收集到STATIC_ROOT中
STATIC_STORAGE = 'django.contrib.staticfiles.storage.StaticFilesStorage'
然后确认在settings.py中的INSTALLED_APPS
中有配置项
'django.contrib.staticfiles',
那如何在模版中使用这些静态文件呢?参考如下代码,其中语句{% load static from staticfiles %}
在这个模版文件中只需要出现一次。
{% load static from staticfiles %}
<link href="{% static "css/sample.css" %}" rel="stylesheet">
用下边的方法也可
{% load static from staticfiles %}
{% static "css/sample.css" as sample %}
<link href="{{ sample }}" rel="stylesheet">
Django在运行时会自动将这些文件映射到STATIC_URL
所给定的值下。也就是如,如果STATIC_URL = '/static/'
,那么在运行时,上边模版中的样例中的url会被替换为/static/css/sample.css
。
注1:其实将静态文件路径硬编码在模版中也可以正常运行,如使用href="/static/css/sample.css"
,前提是配置好了STATIC_URL
和STATIC_DIRS
。但并不推荐这么做,因为如果后来静态资源的位置发生了迁移,如使用独立服务器或者使用CDN,就要修改一大堆URL。而使用推荐的方法可以避免这个庞大的工作量,最多只需要修改STATIC_URL
即可。
注2:如果css文件中也使用了静态文件如css背景,则按照相对路径使用即可,因为浏览器解析css是会自动按照相对路径寻找到正确的URL。
在开发阶段,Django使用的是内建的一个静态文件服务器,虽然在生产环境中也可以使用,但是它既不稳定也不安全。更好的方式是使用提供web服务的服务器如apache来服务静态文件。
首先上传代码到服务器,然后运行collectstatic命令
# python manage.py collectstatic
然后配置web服务器来为静态文件服务,如对Apache2进行配置
Alias /robots.txt /var/www/mysite/static/robots.txt
Alias /favicon.ico /var/www/mysite/static/favicon.ico
Alias /media/ /var/www/mysite/media/
Alias /static/ /var/www/mysite/static/
<Directory /var/www/mysite/static>
Require all granted
</Directory>
<Directory /var/www/mysite/media>
Require all granted
</Directory>
WSGIScriptAlias / /var/www/mysite/mysite/wsgi.py
WSGIPythonPath /var/www/mysite
<Directory /var/www/mysite/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
注意:如果使用的是2.4以前的Apache版本,那么需要将Require all granted
修改如下,且注意deny
和allow
之间没有空格!!!
Order deny,allow
Allow from all
与上边基本相同,由于是另一台机器,因此可以使用其他的web服务器如nginx等。
首先上传代码到Django所在的服务器并执行collectstatic命令,将静态文件收集到Django所在服务器上的目录STATIC_ROOT
中,然后拷贝这些静态文件到专用服务器上,配置专用服务器使其能够提供静态文件服务。可以考虑使用rsync来进行拷贝,因为它仅仅会传输发生改动的那些字节。
另外,因为静态文件迁移到了另一台服务器上,所以可能需要修正STATIC_URL
,同时重新配置web服务器。
当然,这个过车也可以使用脚本自动完成,如使用Fabric.
如果使用云存储或者CDN,有两种方法可以提供静态文件。
第一种类似在专用的服务器上提供静态文件,只是才拷贝文件的时候是拷贝到相应的云服务或者CDN上。
第二种方法,如果第三方云存储服务或者CDN提供了API,可以动手实现一个静态文件收集引擎,那么运行collectstatic命令时会自动将静态文件收集到第三方存储中,过程也就变得更简单。
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。