我想通过django 1.5内置开发服务器启用服务静态文件.我遇到了一个奇怪的问题.
如果我使用静态文件发出请求,localhost:8000/static/staticstyle.css那么它会404找不到我的响应.但是如果我向同一个文件发出请求而没有提到的值STATIC_URL并添加url模式"url(r'^anyval_other_than_mentioned_STATIC_URL/', django.views.static.serve,{'document_setting':settings.STATIC_ROOT}), ",那么它会响应我304,这是条件获取.
我已经收集了设置文件中静态目录设置中的所有静态文件,并启用了模板所需的所有上下文处理器.
为了生产,我使用nginx来提供静态文件,所以没有问题.
我的settings.py看起来像
STATIC_ROOT = APPLICATION_PATH+"/static/"
STATIC_URL = '/static/'
STATICFILES_DIRS = (
('vendors',APPLICATION_PATH+'/vendors'),
('admin/assets/',APPLICATION_PATH+'/templates/admin/assets'),
# 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.
)
Run Code Online (Sandbox Code Playgroud)
我的应用程序urls.py看起来像
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
Run Code Online (Sandbox Code Playgroud)
任何提示都将受到高度赞赏.
谢谢 .
请先阅读本文 https://docs.djangoproject.com/en/1.5/howto/static-files/
有一些与静态文件服务相关的设置查找后端的列表知道如何在不同位置查找静态文件.
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
Run Code Online (Sandbox Code Playgroud)
应收集目录静态文件的绝对路径
STATIC_ROOT = os.path.join(APPLICATION_PATH, '..', 'static')
Run Code Online (Sandbox Code Playgroud)
静态文件的URL前缀.
STATIC_URL = '/static/'
Run Code Online (Sandbox Code Playgroud)
您可以指定静态文件的其他位置
STATICFILES_DIRS = (
os.path.join(APPLICATION_PATH, 'vendors'),
os.path.join(APPLICATION_PATH, '/templates/admin/assets'),
)
Run Code Online (Sandbox Code Playgroud)
django contrib中有静态服务的特殊应用
INSTALLED_APPS = (
...
'django.contrib.staticfiles',
...
)
Run Code Online (Sandbox Code Playgroud)
配置项目运行collectstatic命令后
python manage.py collectstatic
Run Code Online (Sandbox Code Playgroud)
这会将静态文件夹中的所有文件复制到STATIC_ROOT目录中.