Как использовать медиафайл в представлении django, другими словами, как получить адрес медиафайла в представлении
Я включил следующее в свой 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""")
Теперь, как вы видите, чтобы получить значение результата, мне нужно передать адрес файла в функцию. Теперь я в замешательстве, что я должен поместить в функцию.
У меня есть каталог media, в котором я создал подкаталог '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 файл через форму
Спасибо
Вы можете получить путь audio
к instance
с помощью атрибута .path
[Django-doc]:
instance.audio.path
если вам нужен медиа URL, вы можете использовать атрибут .url
[Django-doc]:
instance.audio.url
Вы, вероятно, должны сначала проверить, не является ли instance
0
, поскольку в этом случае вы не работаете с Clip
моделью.
В вашей форме необходимо указать enctype="…"
HTML-атрибут [dev-mozilla] в теге <form>
:
<form method="POST" action="{% url 'application:audio' %}" enctype="multipart/form-data">
…
</form>