2013-09-29 152 views
0

我有一個關於在我的模板中提供管理員上傳文件的問題。Django提供動態文件

我設置:

MEDIA_URL='/media/' 
MEDIA_ROOT = 'assets/' 

和我的模型是這樣的:

mainPhoto = models.ImageField(upload_to="articles/") 

當我的模板,我嘗試:

<img src="{{MEDIA_URL}}{{article.mainPhoto}}" /> 

圖像上不顯示網站。

我發現一個棄用的解決方案與django .serve(),但我希望避免使用它。

我到處尋找,沒有找到任何答案,所以我希望這裏有人能幫助我。

+0

你得到了什麼,如果你離開MEDIA_ROOT =」「 – drabo2005

+1

MEDIA_ROOT必須是絕對的。絕對路徑以斜槓開始。 –

回答

2

有兩個部分可以完成這項工作。首先是Django配置。您已經提到了這兩個設置 - MEDIA_URLMEDIA_ROOT。正如評論中已經指出的那樣,MEDIA_ROOT必須是絕對路徑。例如:

MEDIA_ROOT = `/abs/path/to/project/media/` 

第二部分實際上是爲文件提供服務。如果你在製作中,你永遠不想通過Django來提供你的靜態或媒體文件,所以你應該配置Apache或nginx或者你用來提供文件而不是Django的任何服務器系統。另一方面,如果您還在開發應用程序,則可以使用Django提供媒體文件。我們的想法是修改urls.py並使用Django的靜態文件服務器提供的媒體文件,以及:

# urls.py 
from django.conf import settings 
from django.conf.urls.static import static 
urlpatterns = patterns('', 
    # other patterns 
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

更多關於這種方法在Django的docs

此外,你可能不應該使用{{MEDIA_URL}}{{article.mainPhoto}}來獲取圖像的網址。例如,如果您不再使用文件系統存儲來存儲靜態文件,並且會切換到Amazon S3等不同的方式,則此方法將中斷。它始終是爲存儲後端找出網址是一個好主意:

<img src="{{article.mainPhoto.url}}" /> 
+2

好的,謝謝,我沒有配置好nginx服務器和你的:{{article.mainPhoto.url}} 解決了另一個問題。 我等待的一天,我會更好地在Django的編程和幫助人們^^。 – Edgarth