2016-11-30 60 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