如何在 Django 视图中使用媒体文件,换句话说,我如何在视图中获取媒体文件的地址
how to use a media file in a django view, in other words, how do i get the address of the media file in a view
我在 settings.py 中添加了以下内容:
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
这是我必须存储其 FileInput 的模型:
class Clip(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=False)
audio = models.FileField(upload_to='audio/')
class Meta:
db_table = 'Audio_store'
我的模型形式:
class AudioForm(forms.ModelForm):
class Meta:
model = Clip
fields = ['audio']
最后是我需要此文件地址的视图:
form = AudioForm(request.POST, request.FILES or None)
try:
instance = Clip.objects.get(owner=request.user)
instance.delete()
except Clip.DoesNotExist:
instance = 0
if form.is_valid():
instance = form.save()
else:
return HttpResponse("Failed")
result = function_name("""destination of the audio file in media directory""")
现在如您所见,要获得结果的值,我需要将文件的地址提供给函数。现在我很困惑我应该在函数中放什么。
我有一个媒体目录,我在其中创建了一个子目录 'audio'。但我无法弄清楚如何将带有文件名的确切地址放入此函数。 (这是我可以使用此功能的唯一方法)
请帮帮我
编辑:
这就是我接受用户输入的方式:
<form method="POST" action="{% url 'application:audio' %}">
{% csrf_token %}
{{ form | crispy }}
<br>
{% if form.errors %}
{% for field in form %}
{% for error in field.errors %}
<div class="alert alert-danger">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endfor %}
{% for error in form.non_field_errors %}
<div class="alert alert-danger">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endif %}
<br>
<input type="submit" class="btn btn-primary mt-3 mb-3 btn-register" value="Upload and Connect!!" />
</form>
form.errors 不显示任何内容,但表单从未经过验证。我正在通过
格式上传一个 mp3 文件
谢谢
可以通过.path
attribute [Django-doc]获取instance
的audio
的路径:
instance.audio<strong>.path</strong>
如果你想要媒体 URL,你可以使用 .url
attribute [Django-doc]:
instance.audio<strong>.url</strong>
您可能应该首先检查 instance
是否不是 0
,因为在那种情况下,您不使用 Clip
模型。
在您的表单中,您应该在 <form>
标记中指定 enctype="…"
HTML attribute [dev-mozilla]:
<form method="POST" action="{% url 'application:audio' %}" <strong>enctype="multipart/form-data"</strong>>
…
</form>
我在 settings.py 中添加了以下内容:
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
这是我必须存储其 FileInput 的模型:
class Clip(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=False)
audio = models.FileField(upload_to='audio/')
class Meta:
db_table = 'Audio_store'
我的模型形式:
class AudioForm(forms.ModelForm):
class Meta:
model = Clip
fields = ['audio']
最后是我需要此文件地址的视图:
form = AudioForm(request.POST, request.FILES or None)
try:
instance = Clip.objects.get(owner=request.user)
instance.delete()
except Clip.DoesNotExist:
instance = 0
if form.is_valid():
instance = form.save()
else:
return HttpResponse("Failed")
result = function_name("""destination of the audio file in media directory""")
现在如您所见,要获得结果的值,我需要将文件的地址提供给函数。现在我很困惑我应该在函数中放什么。
我有一个媒体目录,我在其中创建了一个子目录 'audio'。但我无法弄清楚如何将带有文件名的确切地址放入此函数。 (这是我可以使用此功能的唯一方法)
请帮帮我
编辑: 这就是我接受用户输入的方式:
<form method="POST" action="{% url 'application:audio' %}">
{% csrf_token %}
{{ form | crispy }}
<br>
{% if form.errors %}
{% for field in form %}
{% for error in field.errors %}
<div class="alert alert-danger">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endfor %}
{% for error in form.non_field_errors %}
<div class="alert alert-danger">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endif %}
<br>
<input type="submit" class="btn btn-primary mt-3 mb-3 btn-register" value="Upload and Connect!!" />
</form>
form.errors 不显示任何内容,但表单从未经过验证。我正在通过
格式上传一个 mp3 文件谢谢
可以通过.path
attribute [Django-doc]获取instance
的audio
的路径:
instance.audio<strong>.path</strong>
如果你想要媒体 URL,你可以使用 .url
attribute [Django-doc]:
instance.audio<strong>.url</strong>
您可能应该首先检查 instance
是否不是 0
,因为在那种情况下,您不使用 Clip
模型。
在您的表单中,您应该在 <form>
标记中指定 enctype="…"
HTML attribute [dev-mozilla]:
<form method="POST" action="{% url 'application:audio' %}" <strong>enctype="multipart/form-data"</strong>>
…
</form>