1

我想通过 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.
)

我的应用程序 urls.py 看起来像

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),  
) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

任何提示将不胜感激。

谢谢你 。

4

1 回答 1

5

请先阅读此 https://docs.djangoproject.com/en/1.5/howto/static-files/

有一些与静态文件相关的设置 serve finder 后端列表,它知道如何在各个位置查找静态文件。

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

目录静态文件的绝对路径应收集到

STATIC_ROOT = os.path.join(APPLICATION_PATH, '..', 'static')

静态文件的 URL 前缀。

STATIC_URL = '/static/'

您可以指定静态文件的其他位置

STATICFILES_DIRS = (
    os.path.join(APPLICATION_PATH, 'vendors'),
    os.path.join(APPLICATION_PATH, '/templates/admin/assets'),
)

django contrib中有静态服务的特殊应用

INSTALLED_APPS = (
    ...
    'django.contrib.staticfiles',
    ...
)

配置项目运行collectstatic命令后

python manage.py collectstatic

这会将静态文件夹中的所有文件复制到STATIC_ROOT目录中。

于 2013-10-25T14:48:16.180 回答