对于django项目中的静态文件,尽管django的建议是让每个app拥有自己的static目录,然后由django将这些静态文件汇总到一起,但我的习惯是将静态文件目录/static/放在根目录下,即

myproject/
    |- manager.py
    `- myproject/
        |- app1
        |- app2
        |- static/      <-- 静态文件都放在这里
        |    |- js/
        |    `- css/
        |- urls.py
        |- settings.py
        `- ...

这样部署之后可以将static目录移出项目由nginx单独处理,而开发时就得改下urls.py使python能处理这些静态文件。

from django.conf import settings
from django.conf.urls.static import static

...

if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

最后最重要的一点(我经常忘记的)就是要在settings.py中禁用掉静态文件收集功能:

INSTALLED_APPS = (
    ...
    # 'django.contrib.staticfiles',  # 禁用静态文件自动发现
    ...
)

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'myproject', 'static')