2011-05-09 234 views
2

我已經停止使用django 1.1創建新項目,並且從那時起只能在已經創建的應用程序上工作。從那以後,我猜靜態服務有所變化(項目正在使用Django 1.2.4)。我掙扎了幾個小時,沒有結果,所以如果有人知道我做錯了什麼,請讓我知道。靜態文件不在django中加載

我的設置:

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}}路徑as/static /但我的文件沒有加載。去http://127.0.0.1:8000/static/(帶或不帶最後一個斜槓)顯示根頁面。 Firebug顯示頁面的html代碼來代替javascript文件。我寧願期待404錯誤。問題在哪裏?


轉換爲1.3。問題仍然是:

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

+0

嘗試django-staticfiles,或者更好地升級到包含改進版本的Django 1.3:http://docs.djangoproject.com/en/1.3/howto/stati c-files/ – zeekay 2011-05-09 00:17:47

+0

我已經切換到1.3,仍然是+,現在STATIC_URL是空的。 – euklemo 2011-05-09 00:39:03

+0

你可以展示更多的urls.py,我猜你在你的網址中有一個正則表達式,它在達到你的靜態服務條目之前抓住你所有的網址。 – DTing 2011-05-09 00:51:43

回答

3

如果您正在使用Django的1.3 django.contrib.staticfiles,應用程序將查找靜態文件的所有安裝的應用程序的static子文件夾下。例如,staticfiles會自動拿起下面的CSS:如果你在你的settings.py使用django.contrib.staticfilesSTATIC_URL = '/static/'

yourproject/ 
    appone/ 
     static/ 
      sample.css 

,就可以輕鬆地訪問CSS:

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

爲了您的情況下,看起來像你有一個靜態文件夾下的項目文件夾,我會假設以下內容:

yourproject/ 
    static/ 

如果你w螞蟻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

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

+0

This Works!謝謝 – tdc 2012-08-13 12:13:26