2016-11-30 61 views
1

我有一個Django web應用程序,並且正在爲我的前端使用ReactJS。我的應用程序想要在本地開發(包含我的音樂文件的文件夾)以及生產(服務器上的文件系統)時檢索本地音樂文件。兩者都有不同的路徑,所以我對dev和prod有不同的設置。從ReactJS前端訪問Django MEDIA_URL和MEDIA_ROOT setting.py值

我設置

MEDIA_ROOT = os.path.join(BASE_DIR, 'music') # on dev env 
MEDIA_URL = '/media/' 

其中, 「音樂」 是包含文件的文件夾我的。

我加

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

我urls.py但當ReactJs被渲染它的治療是變量只是一個字符串的組件,而不是讓我設置

<audio src={"{{ MEDIA_ROOT }}" + props.audio}></audio>

其中props.audio是文件的路徑。

我還添加了

django.core.context_processors.media 

到模板在我的settings.py,但它仍然無法正常工作

然而,當我在網址欄中輸入「本地主機:8000 /媒體/路徑/ to/music.wav',我可以看到該文件。

有關如何從我的JavaScript獲取MEDIA_URL和MEDIA_ROOT值的任何想法?或者我必須打電話給我的Django後端來檢索這些值,每次我渲染組件?

回答

2

您可以使用文件字段的url屬性。 例如,如果你擁有的FileField模型中的「聲音」,你可以試試這個來獲取文件的URL:

{{ props.audio.url }} 

但是,如果你沒有模式,在你看來有一些變量中包含文件的URL「props.audio在模板

def my_view(request): 
    return render(request, 'template.html', {'props_url': props.audio}) 

我們得到URL簡單做以下:「你可以從視圖將它傳遞給模板

{{ props_url }} 
+0

我沒有使用任何模型雖然,那會是接近的最好方式它?爲這些文件創建一個模型? – user3226932

+0

@ user3226932你可以顯示什麼是props.audio,你如何將它傳遞給模板?我想問題是Django不能解析這個'{「{{MEDIA_ROOT}}」+ props.audio}'作爲url。你可以在視圖中進行字符串連接並將結果傳遞給模板嗎? – neverwalkaloner

+0

我想這就是問題所在。我沒有將它傳遞給Django模板,我使用ReactJS來呈現視圖,而不是Django,無論哪種方式,我認爲我必須調用django後端來獲取這些值? – user3226932