【问题标题】: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如何在 django 视图中使用媒体文件,换句话说,我如何在视图中获取媒体文件的地址
【发布时间】:2021-11-29 12:02:18
【问题描述】:

我在我的 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""")

现在您可以看到要获取结果的值,我需要将文件的地址提供给函数。现在我很困惑我应该在函数中添加什么。

我有一个媒体目录,我在其中创建了一个子目录“音频”。但是我不知道如何将带有文件名的确切地址输入到此函数中。 (这是我可以使用此功能的唯一方法)

请帮帮我

编辑: 这就是我接受用户输入的方式:

<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 文件

谢谢

【问题讨论】:

  • instance.audio.path
  • @WillemVanOnsem 我已经稍微更新了这个问题。你能看看吗?这是一种紧急情况
  • print(form.errors) 如果form.is_valid() 失败。
  • @WillemVanOnsem form.errors 只打印“音频”??
  • 您忘记指定enctype,请参阅编辑后的答案。

标签: django django-views django-file-upload django-media


【解决方案1】:

您可以通过.path attribute [Django-doc]获取instanceaudio的路径:

instance.audio<strong>.path</strong>

如果你想要媒体网址,可以使用.url attribute [Django-doc]

instance.audio<strong>.url</strong>

您可能应该首先检查instance 是否不是0,因为在这种情况下,您不能使用Clip 模型。

在您的表单中,您应该在&lt;form&gt; 标签中指定enctype="…" HTML attribute [dev-mozilla]

<form method="POST" action="{% url 'application:audio' %}" enctype="multipart/form-data">
    …
</form>

【讨论】:

  • 感谢您的回答,您能帮我解决关于同一主题和同一观点的另一件事吗?
猜你喜欢
  • 2012-03-21
  • 2022-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-03
  • 1970-01-01
相关资源
最近更新 更多