我已经停止使用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",
)
urls:
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。问题仍然存在。
发布于 2011-12-31 08:14:23
如果您使用的是render_to_response,则必须传递可选的第三个参数:
context_instance=RequestContext(request)
所以完整的代码如下所示:
return render_to_response('index.html',{'dict':'ionary'},context_instance=RequestContext(request))
{{ STATIC_URL }}适用于RequestContext,而render_to_response的默认值为Context
发布于 2011-05-09 09:10:17
如果你使用的是Django的1.3 django.contrib.staticfiles
,该应用程序将在所有已安装应用程序的static
子文件夹下查找静态文件。例如,staticfiles
将自动选取以下css:
yourproject/
appone/
static/
sample.css
如果您在settings.py
中使用django.contrib.staticfiles
和STATIC_URL = '/static/'
,则可以在以下位置轻松访问settings.py
:
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的内容。
https://stackoverflow.com/questions/5931281
复制相似问题