Django中静态文件路径的配置

官方文档 https://docs.djangoproject.com/en/1.8/howto/static-files/

里面涉及几个个参数:

(1)第一个参数
STATIC_URL = '/static/'
配置了该参数,那么在app路径下的static/my_app/img/myexample.jpg这个路径的 文件可以这样在模板中使用。
{% load staticfiles %}
<img src="{% static "my_app/img/myexample.jpg" %}" alt="My image"/>
这个路径既然是在app路径下的,那么app自包含的静态文件应该放在这里。形成了 自包含的一个app,这样可以随时把这个app复制到别的项目 中使用。

(2)那么如果有些静态文件不属于app,而是属于项目的,或者操作系统其他绝对路径 的怎么办。
看第二个参数
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
    '/var/www/static/',
)

这样在模板中是不用变更的,仍然是上面那样的写法,只不过查找路径增加了两 个,可以查找项目下的static路径。


(3)接下来那么如果我要把项目上线了,部署在http服务器中,但是每个app中都有静态文 件,每个project中都有静态文件,路径太多,怎么办?

看第三个参数
STATIC_ROOT = "/var/www/example.com/static/"
在定义完该参数后,我们可以运行
python manage.py collectstatic命令,它将会自动把上面配置的静态路径下的所有文件复制到STATIC_ROOT 路径中。这样就可以统一在http服务器中配置静态文件。

(4)注意:

(a)如果我们在多个app下使用这样的路径static/imgs/xxx.png,那 么我们在collectstatic后,相同 名字的会覆盖,导致问题。所以我们一般在app下的static下加上app的namespace,形成static/myapp_name /imgs/xxx.png这 样的结构,即使多个app的静态文件复制到同一个文件夹下,也 没有问题。

(b)配置完static后,配置contrib.staticfiles
在settings.py文件中找到INSTALLED_APPS,确保其中包含有’django.contrib.staticfiles',一般该配置以默认加入了,如果你开发的时候使用的是runserver方式启动服务器,那么你就完成了所有配置,如果你使用其他服务器来开发,则还需要在项目的urls.py中加上如下配置:

from django.contrib.staticfiles.urls import staticfiles_urlpatterns    
# ... the rest of your URLconf goes here ...    
urlpatterns += staticfiles_urlpatterns() 
 需要注意的是,上面代码的第一行必须放在整个urls文件的第一行,上面代码的最后一行必须放在urls文件的最后一行。


那么在开发中,我们关注的:
1、如果仅需要在app中添加静态文件,STATIC_URL就可以满足我们。
2、如果需要在项目目录下,或者别的系统目录下添加静态文件,那么 STATICFILES_DIRS就可以满足我们
3、如果我们要把项目上线,那么我们需要配置STATIC_ROOT并且collectstatic, 这样可以在http服务器中统一配置静态文 件路径,方便做7层负载均衡,或者cdn 等加速静态文件加载的高级功能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章