我已经停止使用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。问题仍然存在:
答案 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的更多信息。