静态文件不会在django中加载

时间:2011-05-09 00:13:30

标签: django static django-statistics

我已经停止使用django 1.1创建新项目,从那时起,它只适用于已创建的应用程序。从那时起,我猜静态服务以某种方式改变了(项目正在使用Django 1.2.4 )。我挣扎了几个小时但没有结果,所以如果有人知道我做错了什么,请告诉我。

我的设置:

PROJECT_PATH = os.path.realpath(os.path.dirname(__file__))
MEDIA_ROOT = os.path.join(PROJECT_PATH, 'media')
MEDIA_URL = '/static/'
ADMIN_MEDIA_PREFIX = '/media/'

SECRET_KEY = '(d9bahjuyy_i-)4b(w9gc5a&s&5jemcn7&b^wrbuemah3p-6^#'

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
)

TEMPLATE_DIRS = (
    os.path.join(PROJECT_PATH, 'templates'),
)

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.admin',
    'django.contrib.admindocs',
    'project',
)

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.core.context_processors.auth",
    "django.core.context_processors.request",
    "django.core.context_processors.media",
    "django.core.context_processors.csrf",
    "django.core.context_processors.i18n",
)

网址:

urlpatterns += patterns('',
    (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes' : True}),
)

媒体文件位于../project_path/media

在模板中,我将{{MEDIA_URL}}路径作为/ static /但我的文件未加载。转到http://127.0.0.1:8000/static/(带或不带最后一个斜杠)显示根页面。 Firebug显示页面的html代码代替javascript文件。我宁愿期待404错误。问题出在哪里?


突然变为1.3。问题仍然存在:

http://www.megaupload.com/?d=2BGN8BU2

2 个答案:

答案 0 :(得分:7)

如果您使用的是render_to_response,则必须传递可选的第3个参数:

context_instance=RequestContext(request)

soe完整代码如下:

return render_to_response('index.html',{'dict':'ionary'},context_instance=RequestContext(request))

{{STATIC_URL}}与RequestContext一起使用,而render_to_response的默认值是Context

答案 1 :(得分:3)

如果您使用的是Django的1.3 django.contrib.staticfiles,该应用将在所有已安装应用的static子文件夹下查找静态文件。例如,staticfiles会自动获取以下css:

yourproject/
    appone/
        static/
            sample.css

如果您在django.contrib.staticfiles中使用STATIC_URL = '/static/'settings.py,则可以轻松访问css:

http://localhost:8000/static/sample.css

对于您的情况,看起来您的项目文件夹下有一个静态文件夹,我将假设以下内容:

yourproject/
    static/

如果您希望staticfiles选择上述内容,请从urls.py中删除以下内容:

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

将以下内容添加到settings.py

import os
SITE_ROOT = os.path.realpath(os.path.dirname(__file__))

STATICFILES_DIRS = (
    os.path.join(SITE_ROOT, 'static'),
)

在您的模板中,您可能希望开始使用STATIC_URL而不是MEDIA_URL,除非它们都指向相同的值。

您可以阅读有关staticfiles in Django 1.3的更多信息。