Django 1.4提供媒体文件,但不是静态的

时间:2013-05-20 13:45:39

标签: python django python-2.7 http-status-code-404 django-staticfiles

我正在使用Django 1.4,出于某种原因我可以提供媒体文件,但不是静态文件... 这是我的代码: 设置:

MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
MEDIA_URL = '/media/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
STATIC_URL = '/static/'
ADMIN_MEDIA_PREFIX = '/static/admin/'

urls.py:

(r'^media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT}),
                    (r'^static/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.STATIC_ROOT}),

base.html文件:

<link href="{{ STATIC_URL }}css/bootstrap.css" rel="stylesheet">
<link href="{{ MEDIA_URL }}css/bootstrap-colorpicker.css" rel="stylesheet">

我得到404 http未找到...我做错了什么?我确实在我的项目中创建了静态文件夹,紧邻媒体

  

http://mysite.com:8000/static/css/bootstrap.css

3 个答案:

答案 0 :(得分:1)

我建议删除显式媒体和静态视图,并允许staticfiles应用程序创建它们(当开发时DEBUG为True)。

检查settings.py中是否存在默认查找程序 https://docs.djangoproject.com/en/1.4/ref/contrib/staticfiles/#std:setting-STATICFILES_FINDERS

将项目静态目录添加到STATICFILES_DIRS(https://docs.djangoproject.com/en/1.4/ref/contrib/staticfiles/#std:setting-STATICFILES_DIRS)或在每个应用程序下放置特定于应用程序的静态文件夹。应用程序需要在INSTALLED_APPS中列出,以便查找静态内容。

不要自己将静态文件放入STATIC_ROOT。该目录由 collectstatic 命令管理。见https://docs.djangoproject.com/en/dev/howto/static-files/#deployment

答案 1 :(得分:1)

您的静态文件夹应位于您使用它的一个应用程序下。

例如,我有一个名为my_project的项目和一个名为my_app的应用程序,我在my_app中使用了一些静态文件,因此我将它们放在~/project_path/my_project/my_app/static

注意: my_app必须在INSTALLED_APPS。请参阅STATICFILES_FINDERS documentation

修改

作为最佳实践,您应该在一个应用程序(主要应用程序)中拥有一个全局静态文件夹,例如静态文件夹如何将您的html模板基本资源包含为jquery,bootstrap,您的全局样式。

对于静态文件,仅对一个应用程序(例如应用程序foo)的要求,这些文件应位于foo/static文件夹

答案 2 :(得分:0)

以下是我在settings.py中定义媒体网址的方法:

import os
ABSOLUTE_PATH           = os.path.dirname(__file__)
MEDIA_ROOT              = os.path.join(ABSOLUTE_PATH, '../media')
MEDIA_URL               = '/media/'
STATIC_ROOT             = os.path.join(ABSOLUTE_PATH, '../static')
STATIC_URL              = "/static/"

所以你看到差异是../media和../ static

你安装的应用程序中有mysite吗? Django查看已安装的应用程序并检查那里是否有静态文件夹。