首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >静态文件无法在django中加载

静态文件无法在django中加载
EN

Stack Overflow用户
提问于 2011-05-09 08:13:30
回答 2查看 4.2K关注 0票数 2

我已经停止使用django 1.1创建新项目,从那时起,我只在已经创建的应用程序上工作。从那时起,我猜静态服务不知何故发生了变化(项目使用的是Django 1.2.4)。我挣扎了几个小时,没有结果,所以如果有人知道我做错了什么,请让我知道。

我的设置:

代码语言:javascript
复制
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",
)

urls:

代码语言:javascript
复制
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。问题仍然存在。

EN

回答 2

Stack Overflow用户

发布于 2011-12-31 08:14:23

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

代码语言:javascript
复制
context_instance=RequestContext(request)

所以完整的代码如下所示:

代码语言:javascript
复制
return render_to_response('index.html',{'dict':'ionary'},context_instance=RequestContext(request))

{{ STATIC_URL }}适用于RequestContext,而render_to_response的默认值为Context

票数 7
EN

Stack Overflow用户

发布于 2011-05-09 09:10:17

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

代码语言:javascript
复制
yourproject/
    appone/
        static/
            sample.css

如果您在settings.py中使用django.contrib.staticfilesSTATIC_URL = '/static/',则可以在以下位置轻松访问settings.py

代码语言:javascript
复制
http://localhost:8000/static/sample.css

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

代码语言:javascript
复制
yourproject/
    static/

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

代码语言:javascript
复制
(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes' : True}),

将以下内容添加到您的settings.py

代码语言:javascript
复制
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的内容。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5931281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档