2009-07-04 80 views
18

我已經成功地爲普通媒體文件提供媒體文件,但是當我嘗試提供管理媒體文件時,我失敗了。請幫助我找出問題所在,因爲我已經嘗試將問題解決了幾個小時,但沒有運氣(也一直在使用Google搜索並閱讀關於提供靜態文件的django文檔)。Django:提供ADMIN媒體文件

的錯誤,因爲我試圖訪問本地主機:8000 /媒體/ A.GIF是如下:

Page not found: f:\python25\lib\site-packages\django/contrib/admin/media\a.gif

我把管理媒體文件名爲「媒體」的目錄,而我把正常的媒體名爲「static」的目錄中的文件。我也在Windows上。

下面是如何服務於urls.py普通的媒體文件:

# serve static files 
from django.conf import settings 
if settings.ENVIRONMENT==settings.ENV_DEVELOPMENT: 
    urlpatterns += patterns("django.views", 
     url(r"%s(?P<path>.*)$" % settings.MEDIA_URL[1:], "static.serve", {"document_root": settings.MEDIA_ROOT,}) 
    ) 

我的settings.py(只有重要的部分):

import project_path 
MEDIA_ROOT = project_path.MEDIA.replace('\\','/') 
MEDIA_URL = '/static/' 
ADMIN_MEDIA_PREFIX = '/media/' 
TEMPLATE_DIRS = (
    project_path.TEMPLATE.replace('\\','/'), 
) 

而且我project_path.py:

import sys 
from os.path import dirname, join 
ROOT = dirname(__file__) 
APP = join(ROOT, "apps") 
TEMPLATE = join(ROOT, "templates") 
MEDIA = join(ROOT, "static") 
ADMIN_MEDIA = join(ROOT, "media") 

任何提示?

或許至少請分享你如何爲你的管理媒體文件(沒有從Web服務器更改任何文件,但只能通過Django的源代碼)

感謝提前:)

+0

你有沒有解決這個問題?我有一個與Django 1.1一起使用Mac的類似體驗,服務於普通媒體文件,但不適用於管理員... – Danielb 2009-08-05 04:45:48

+0

url設置不起作用的原因是因爲`django/core/management/commands/runserver。 py`和`django.core.servers.basehttp`一起爲`ADMIN_MEDIA_PREFIX`設置了一個WSGI處理程序。它處理請求之前URLconf命中 – vdboor 2012-04-06 12:05:48

回答

1

嘗試改變:

ADMIN_MEDIA_PREFIX = '/static/media/'

這裏假設你的MEDIA_ROOT /媒體/目錄包含了管理媒體文件夾(這是我從你的問題理解的)。

+0

感謝您的答案,但它仍然無法工作:) 我在broswer url中輸入http:// localhost:8000/static/media/a.gif,結果是: 未找到頁面:f:\ python25 \ lib \ site-packages \ django/contrib/admin/media \ a.gif – 2009-07-05 14:51:05

+0

我想我會嘗試使用傳統的管理員媒體示例重新創建項目:)感謝您的答案 – 2009-07-05 14:53:43

2

嘗試

(R '^ admin_media /(.*)', 'django.views.static.serve',{ 'DOCUMENT_ROOT': 'django的/了contrib /管理/媒體/', 'show_indexes' :True}),

在您的urls.py文件中。並改變你的

ADMIN_MEDIA_PREFIX = '/admin_media/' 
+0

感謝您的答案,但它仍然無法正常工作:)我在broswer網址輸入http:// localhost:8000/admin_media/a.gif,結果是: Page not found: f:\ python25 \ lib \ site-packages \ django/contrib/admin/media \ a.gif – 2009-07-05 14:51:59

2

我剛剛在我的測試網站修復了一個類似的錯誤。 ADMIN_MEDIA_PREFIX和MEDIA_URL絕不應該是相同的,請參閱docs以下注意事項:

Make sure to use a trailing slash, and to have this be different from the MEDIA_URL setting (since the same URL cannot be mapped onto two different sets of files).

32

你的答案是,除非ADMIN_MEDIA_PREFIX明確設置一個域 的runserver命令將從contrib.admin發球出管理媒體文件。

我被這個魔法燒掉了。有這張票(Ticket #8336),但設計決定是爲了保持方便和困惑。

所以提供給您的管理員媒體(使用你想使用格拉佩利或任何管理皮膚)從您的目錄,你必須使用類似的runserver命令:

MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media/') 
ADMIN_MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'admin-media/') 
MEDIA_URL = '/site-media/' 
ADMIN_MEDIA_PREFIX = 'http:/localhost:8000/admin-media/' 

我希望我復活了這裏正確的問題。提前道歉。

+0

謝謝,我也燒了這個 – orwellian 2009-11-02 00:12:09

+0

完美。謝謝你。 – 2010-05-05 13:30:43

1

由於靜態文件包含到主幹中(大約1.3我相信),因此不再使用ADMIN_MEDIA_PREFIX魔術。

現在,runserver假定你的STATIC_URL +'admin /'。它祕密地,默默地攔截你的請求,忽略所有你的urlconf,並且試圖讓你發瘋。

0

嘗試使用STATICFILES_DIRS吹塑

# Additional locations of static files 
STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static". 
    # Always use forward slashes, even on Windows. 
    # Don't forget to use absolute paths, not relative paths. 
    ("images", os.path.join(STATIC_ROOT,'images').replace('\\','/')), 
    ("css", os.path.join(STATIC_ROOT,'css').replace('\\','/')), 
    ("js",  os.path.join(STATIC_ROOT,'js').replace('\\','/')), 
) 

有一個好運!