Djang中静态⽂件配置⽅法
下⾯通过图⽂并茂的⽅法给⼤家详细介绍下Djang中静态⽂件配置⽅法
⼀、django静态⽂件配置原理
静态⽂件配置就是为了让⽤户请求时django服务器能到静态⽂件返回。
⾸先要理解⼏个概念:
媒体⽂件:⽤户上传的⽂件静态⽂件:css,js,image等开发环境:使⽤django内置服务器处理静态⽂件⽣产环境:使⽤apache2/nginx服务器处理静态⽂件映射所以在配置时要分清楚开发环境还是⽣产环境,这个后⾯会详细介绍。
下⾯先介绍⼀下服务器查静态⽂件的原理,这样我们才能更好的配置。
1、ib.staticfiles
django1.3之前的静态⽂件都是⽤MEDIA_URL和MEDIA_ROOT来控制的。
为了将媒体⽂件【⽤户上传的⽂件】和静态⽂件做区分,django1.3通过MEDIA_XXX配置来处理媒体⽂件,通过
STATIC_XXX配置项来处理静态⽂件。
staticfiles使开发者可以将静态⽂件分配到app⽬录或任意指定⽬录。
2、MEDIA_XXX和STATIC_XXX配置项的区别
MEDIA_XXX配置项⽤来管理媒体⽂件。经常由FileFields字段上传,它们被保存在settings.MEDIA_ROOT指定的⽬录下,通过settings.MEDIA_URL指定的路径访问。
STATIC_XXX配置项⽤来管理静态⽂件。它们通过manage.py collectstatic命令汇集到settings.STATIC_ROOT⽬录,并通过settings.STATIC_URL指定的路径访问。
3、静态⽂件相关配置项详解
STATIC_ROOT配置项
⽤来指定执⾏manage.py collectstatic时静态⽂件存放的路径。在⽣成环境中,集中存放静态资源有利于使⽤
Lighttpd/Nginx/apache2托管静态资源。为了⽅便调试,通常设置如下:
复制代码代码如下:
SITE_ROOT = os.path.dirname(os.path.abspath(__file__))
SITE_ROOT = os.path.abspath(os.path.join(SITE_ROOT, '../'))
STATIC_ROOT = os.path.join(SITE_ROOT, 'collectedstatic')
STATIC_URL配置项
django模板中,可以引⽤{{STATIC_URL}}变量避免把路径写死。通常使⽤默认设置
复制代码代码如下:
STATIC_URL = '/static/'
ADMIN_MEDIA_PREFIX配置项
ADMIN_MEDIA_PREFIX必须为如下配置,以便staticfiles能够正确到ib.admin的静态资源:
复制代码代码如下:
ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'
在模板中使⽤STATIC_URL
复制代码代码如下:
<link rel="stylesheet" href="{{ STATIC_URL }}css/core.css">
原理懂了后,接下来介绍开发环境和⽣产环境中静态⽂件具体配置。
我的django版本是1.4.21,以此版本做介绍。
复制代码代码如下:
>>> import django
>>> _version()
1.4.21
⼆、开发环境
django1.4,21中默认已安装了staticfiles app,所以开发环境中对静态⽂件的访问不需要对django做任何配置。
有⼀点:开发环境staticfiles查静态⽂件的顺序取决于STATIC_FINDERS配置项,默认配置
复制代码代码如下:
STATICFILES_FINDERS = (
'ib.staticfiles.finders.FileSystemFinder',
'ib.staticfiles.finders.AppDirectoriesFinder',
# 'ib.staticfiles.finders.DefaultStorageFinder',
)
FileStstemFinder⽤来⽤STATICFILES_DIRS【默认为空】指定的路径中查额外的静态⽂件。像jquery,bootstrap等这样公⽤的资源⽂件都是在多个不同的app中共⽤的,django提供了公有的⽬录来
放这些⽂件,这个配置参数就是:STATICFILES_DIRS
AppDirectoriesFinder从INSTALLED_APPS元组中的APP所在包的static⽬录中查资源⽂件。
使⽤如下。
1、新建项⽬lxyproject
复制代码代码如下:
[root@yl-web srv]# django-admin.py startproject lxyproject
2、在项⽬中新建⼀个app名叫hello
复制代码代码如下:
[root@yl-web lxyproject]# python manage.py startapp hello
[root@yl-web lxyproject]# ls
hello lxyproject manage.py
在hello app下建⼀个static⽬录⽤来存放静态⽂件。
复制代码代码如下:
[root@yl-web hello]# mkdir static
[root@yl-web hello]# ls
__init__.py models.py static tests.py views.py
然后在static⽬录新建⼀个的静态⽂件。
复制代码代码如下:
[root@yl-web hello]# cd static/
[root@yl-web static]# ls
<
[root@yl-web static]#
<'s content:congratulations!!
3、在项⽬的settings.py⽂件中INSTALLED_APPS中配置hello app
复制代码代码如下:
INSTALLED_APPS = (
...
'hello',
)
4、运⾏项⽬
复制代码代码如下:
[root@yl-web lxyproject]# python manage.py runserver 0.0.0.0:9000
5、通过url访问
在static⽬录下新建⼀个images⽬录放⼀张sheep.png图⽚,同理通过url访问
三、⽣产环境
前⾯也说了,在⽣成环境中,集中存放静态资源有利于使⽤Lighttpd/Nginx托管静态资源。⽽⽣产环境⼀般是把静态⽂件放在项⽬根⽬录下的static⽬录下。
默认配置
复制代码代码如下:
STATIC_ROOT = ''
STATIC_URL = '/static/'
STATICFILES_DIRS = (
)
我们要做的是
1、配置服务器,我⽤的是apache。
安装配置详情可参考:
Ubuntu apache2服务器配置
centos7 apache httpd安装和配置django项⽬
2、在项⽬根⽬录下创建collectedstatic⽬录。
3、配置settings.py
import os
SITE_ROOT = os.path.dirname(os.path.abspath(__file__))
SITE_ROOT = os.path.abspath(os.path.join(SITE_ROOT, '../'))
STATIC_ROOT = os.path.join(SITE_ROOT, 'collectedstatic')
STATIC_URL = '/static/'
STATICFILES_DIRS = (
# Put strings here, like "/home/html/static" or "C:/www/django/static".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
)
INSTALLED_APPS = (
'ib.auth',
'ttypes',
'ib.sessions',
'ib.sites',
'ssages',
'ib.staticfiles',
# Uncomment the next line to enable the admin:
# 'ib.admin',
# Uncomment the next line to enable admin documentation:
# 'ib.admindocs',
'hello',
)
4、运⾏python manage.py collectstatic收集所有已安装的APP的静态⽂件到根⽬录的collectedstatic【即STATIC_ROOT】中
复制代码代码如下:
[root@yl-web lxyproject]# python manage.py collectstatic
You have requested to collect static files at the destination
location as specified in your settings.
This will overwrite existing files!
Are you sure you want to do this?
Type 'yes' to continue, or 'no' to cancel: yes
Copying '/srv/lxyproject/hello/static/images/sheep.png'
1 static file copied.
django admin 自定义页面5、配置服务器,将/static/路径指向STATIC_ROOT⽬录。
即在虚拟主机中配置
复制代码代码如下:
Alias /static/ /srv/lxyproject/collectedstatic/
6、配置⾄此完成,通过浏览器访问
真正发布⼀个django项⽬时,对静态⽂件的管理可能需要额外做⼀些⼯作:
Less / CoffeeScript 等⾃动编译成css/js
"压缩" css/js⽂件,提⾼浏览器加载速度
合并零碎的css/js⽂件,减少浏览器请求次数
静态资源⽂件的版本话:浏览器会缓存静态⽂件,后台代码和静态资源⽂件都发⽣更新后,浏览器很可能从缓存提取过期的静态资源,导致页⾯显⽰异常。
以上就是Djang中静态⽂件配置⽅法的全部内容,希望⼤家喜欢。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论