參考:
http://my.oschina.net/wenhaowu/blog/197035
http://blog.csdn.net/thy38/article/details/23553975
http://www.tuicool.com/articles/i6NVNrq
http://www.cnblogs.com/wang_yb/archive/2011/04/21/2024311.html
新的Django提供了一個方法自動地將所有的靜態文件放在一起。只要在寫App的時候創建一個static子目錄專門保存靜態文件就行了。在開發階段,不必費心去做映射,不需要配置urls.py。
在布署到生產環境的時候,只需要配置Apache把/static/映射到STATIC_ROOT。然后運行manage.py collectstatic,自動地STATICFILES_DIRS列出的目錄以及各個App下的static子目錄的所有
文件復制到STATIC_ROOT。因為復制過程可能會覆蓋掉原來的文件,所以,一定不能把我們辛苦做出來靜態文件放這邊!
在開發階段,Django把/static映射到django.contrib.staticfiles這個App。staticfiles自動地從STATICFILES_DIRS、STATIC_ROOT以及各個App的static子目錄里面搜索靜態文件。一旦布署
到開發環境上,settings.py不需要重新編寫,只要在Apache的配置文件里面寫好映射,/static將會被Apache處理。django.contrib.staticfiles雖然仍然存在,但因為不會接收到
以/static/開始的路徑,所以將不會產生作用。不必擔心Django會使用處理速度變慢。另外,當settings.DEBUG is False的時候,staticfiles將自動關閉。
這樣不需要在urls.py中的urlpatterns中添加,只要在img處加入
#直接使用
{% load staticfiles %}
<p><img src="{% static "images/psb.jpg" %}"></p>
#變量方式使用
{% load staticfiles %}
<link rel="stylesheet" href="{% static user_stylesheet %}" type="text/css" media="screen"/>
- from django.shortcuts import render_to_response
- def index(request):
- return render_to_response('index.html', {'user_stylesheet': 'css/user.css'})
同時在setting.py中加入
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static').replace('\\', '/'),
)
(MEDIA的設置為
MEDIA_ROOT = os.path.join(BASE_DIR, 'media').replace('\\', '/')
MEDIA_URL = '/media/'