2

我已经停止使用 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 。问题依然存在。

4

2 回答 2

7

以防万一您使用的是 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-12-31T00:14:23.130 回答
3

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

yourproject/
    appone/
        static/
            sample.css

如果您使用django.contrib.staticfilesandSTATIC_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除非它们都指向相同的值。

您可以在 Django 1.3中阅读有关静态文件的更多信息。

于 2011-05-09T01:10:17.180 回答