Django project structure: how does static folder, STATIC_URL, STATIC_ROOT work
So I've been messing up with Django(1.6+) project setting for quite sometime, this is what i finally settled on. Notice that old django releaes might have a different structure than this.
Some explanations:
1. As for the static folder under myproject root, actually it doesn't necessarily have to be there. As long as STATIC_ROOT (in settings.py) points to the same location. So what's going on here is when you do:
- python manage.py collectstatic
It will copy all the individual static folder to the STATIC_ROOT folder, that's why in each of your app, you need to follow the naming convention like this:
app_one/static/app_one/css
You are not supposed to put stuff directly under the app's static folder, which might cause name collisions when you collectstatic.
This centralized static folder is where django looks for it's files, the individual static folders in each app will NOT be referred to after deployment.
2. the STATIC_URL in the settings.py
This url will appear in your browser:
(BTW, make sure the URL ends with a slash/, without a slash it might work but very unstable, django will error out this in the log)
- # STATIC_URL = '/static/' # it doesn't have to this
STATIC_URL = '/static/monkeyking/' # it can be anything
You shouldn't hardcode the img or css in your template something like:
- ... url = "/static/app_one/css/mycss.css" ... <!-- BAD -->
... url = "../../static/app_one/img/logo.png" ... <!-- EVEN WORSE -->
You don't want to manually keep track of the STATIC_URL and the hardcoded value and make them synced yourself. (Which is a pretty bad idea). The "../../" way is not acceptable, cuz in production mode, the template and the static files cannot find each other with relative path (it could work with mange.py, but hell no, don't do it!)
Not only that, if you want to switch to CDN or say a remote folder, hardcoded url will be a pain in the ass to reformat later.
In stead, you should do this in your template:
- {% load staticfiles %}
- <link rel="stylesheet" href="{% static "gl_pulltabs/css/foundation.css" %}"/>
(
More reading on this: {% static %} VS {{ STATIC_URL }}
http://stackoverflow.com/questions/18400315/whats-the-difference-between-using-static-url-and-static
The {% static %}
template tag is aware of your STATICFILES_STORAGE
, using the STATIC_URL
setting is not.
)
When you render the template, it will first interprete the path for you.
Btw way, check if 'django.contrib.staticfiles' is include in settings.py as well, by default it's there, just double check.
- INSTALLED_APPS = (
- 'django.contrib.admin',
- 'django.contrib.auth',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.messages',
- 'django.contrib.staticfiles',
- 'app_one',
- 'app_two',
- )
When you run django dev tool (manage.py), you might not be able to see your static files because django is not able to locate them. STATIC_ROOT is ONLY for deployment purposes. So how do you tell django dev tool to look for the static folder inside your app? (Don't ever think about change it back to "../../")
Here, in settings.py again, you need to explicitly tell django where else to look for static files:
- STATICFILES_DIRS = (
- "/path/to/your/project/yourapp/static/",
...- )
Can you put your deploy static folder(STATIC_ROOT) path to here, so you can save some disk space? No, you cannot! django won't allow it.
The default dev tool, manage.py is good for dev purposes, it can update the url and template changes immediately (VS where the deployed wsgi might need to restart httpd in order to reflect the changes.)
You want to run it in the background so it won't bother you in the console:
- nohup python manage.py runserver 0.0.0.0:8000 &
0.0.0.0 will expose it to outside, if you are running it on a remote server.
Django project structure: how does static folder, STATIC_URL, STATIC_ROOT work的更多相关文章
- [Python] Create a Django project in Pycharm
From: http://blog.csdn.net/u013088062/article/details/50158239 From: http://blog.csdn.net/u013088062 ...
- Start Your Django Project in Nginx with uWsgi
Step 0:Install A,B,C,blabla needed This can be seen in my another article in the blog.click here(una ...
- Apache:To Config The Vhost of Django Project
It is not a good idea to use dev server in Production Environment. Apache or Nginx are good choice.B ...
- Django静态文件的加载以及STATIC_URL、 STATIC_ROOT 、STATICFILES_DIRS的区别
Djangon生产环境静态资源的处理 Django 关闭DEBUG模式后,就相当于是生产环境了. Django框架一旦作为生产环境,它的静态文件访问接口就不应该从Django框架中走,必须在Djang ...
- django project 的快速构建
2003年,堪萨斯(Kansas)州 Lawrence 城中的一个 网络开发小组 ——World Online 小组,为了方便制作维护当地的几个新闻站点(一般要求几天或者几小时内被建立),Adrian ...
- Prepare tasks for django project deployment.md
As we know, there are some boring tasks while deploy Django project, like create db, do migrations a ...
- django 设置静态文件,static
django 设置静态文件,static 一.搜集静态文件 1.1 命令行查看 collectstatic guoguos-MacBook-Pro:mysite guoguo$ python mana ...
- 玩转IDEA项目结构Project Structure,打Jar包、模块/依赖管理全搞定
前言 你好,我是A哥(YourBatman). 如何给Module模块单独增加依赖? 如何知道哪些Module模块用了Spring框架,哪些是web工程? IDEA如何打Jar包?打War包? 熟练的 ...
- .project sturcture和Project Structure 无论是按快捷键或者是从files中打开都不显示
project sturcture和Project Structure 无论是按快捷键或者是从files中打开都不显示 event log中报:IllegalArgumentException:Mul ...
随机推荐
- 荣品四核4412开发板的USB摄像头问题
RP4412开发板是荣品电子研发的一款三星四核Exynos4412评估板开发板,支持WIFI+LAN上网.蓝牙4.0.4G上网.500万自动对焦摄像头.GPS.网卡.音频,1080P HDMI音视频同 ...
- JS常用正则表达式和JS控制输入框输入限制(数字、汉字、字符)
验证数字:^[0-9]*$验证n位的数字:^\d{n}$验证至少n位数字:^\d{n,}$验证m-n位的数字:^\d{m,n}$验证零和非零开头的数字:^(0|[1-9][0-9]*)$验证有两位小数 ...
- javascript如何用户的判断操作系统
<script> alert(window.navigator.userAgent); if(window.navigator.userAgent.indexOf("Window ...
- DataSet集合直接根据传入的类转List<T>集合
最近比较忙,好久没写博客了.个人感觉最好的进步就是写东西.哈哈. 一般我们使用ADO.net从数据库中读取数据返回的集合是DataSet类型的.有时候我们需要进行转换成List<T>集合. ...
- 多线程的学习与python实现
学习了进程与线程,现对自己的学习进行记录. 目录: 一.进程与线程的概念,以及联系与区别 二.多线程 三.python中多线程的应用 四.python实例 五.参考文献 一.进程与线程的概念.以及联系 ...
- Oracle函数over(),rank()over()作用及用法--分区(分组)求和& 不连续/连续排名
(1) 函数: over()的作用及用法: -- 分区(分组)求和. RANK ( ) OVER ( [query_partition_clause] order_by_clause )D ...
- Android两个页面之间的切换效果工具类
import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; ...
- Http的Get/Post请求区别
1.HTTP请求格式: <request line> <headers> <blank line> [<request-body>] 在HTTP请求中, ...
- 2014年6月份第1周51Aspx源码发布详情
企业汽车服务终端管理系统源码 2014-6-3 [VS2010]源码描述:本系统专门服务于(汽车美容4s店) 完整的一套汽车美容管理服务系统. 功能介绍:汽车美容服务终端功能强大而又简便实用,界面友 ...
- 百度star编程赛-练习1
ztr loves math http://acm.hdu.edu.cn/showproblem.php?pid=5675 显然:4 ^ n * (a + b) * (a -b) #include & ...