微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django-如何将最后上传的文件放入模板?

如何解决Django-如何将最后上传的文件放入模板?

我正在制作一个用户可以上传声音文件的网站。他们可以查看用户上传的声音文件列表并播放。

这很管用。我已经用音频元素制作了对象列表的 for 循环。

但是,此外,我还希望能够将最近添加的声音文件单独放置在模板底部,以便可以单独处理(即我想将其放在音频元素中与列表中的那些分开,也可以在模板中单独访问它以使用 WebAudio API 处理它)。

我知道我需要使用过滤器并且我一直在阅读 Model.objects.latest('field') 应该可以完成这项工作(我假设在 views.py 中)但是我做的事情非常错误,无论我输入什么我的视图和我的模板会产生错误。我正在使用基于类的视图和 Django 3.1.7 版

如果有人可以向我展示我需要放入我的模型、视图和模板中的内容,以便我可以从对象列表中将最后添加的声音文件放入我的模板中。我将不胜感激。

我的模型如下所示:

class SoundFile(models.Model):
    sound_file = models.FileField()  
    created_on = models.DateTimeField(auto_Now_add=True,null=True)
    last_modified = models.DateTimeField(auto_Now=True,null=True)

    def get_absolute_url(self):
        return reverse('download-file')  

我的观点如下:

class SoundUploadView(generic.CreateView):

   model = SoundFile
   fields = ['sound_file']
   template_name = 'upload.html'

class SoundDownloadView(generic.ListView):

    model = SoundFile
    fields = ['sound_file']
    template_name = 'download.html'

我的模板如下所示:

上传.html

{% extends "base_generic.html" %}

{% block content %}

<div class="container">
<form action="#" method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.media }}
    {{ form.as_p }}
    <button class="btn btn-primary btn-sm" type="submit">Upload</button>
</form>
</div>
{% endblock %}

下载.html

{% extends "base_generic.html" %}

{% block content %}

  <div class="container">
    {% for document in object_list %}
    <p> {{ document.sound_file.name }} </p>
    <p> Created on: {{ document.created_on}} </p>
    <p> Last modified: {{ document.last_modified}} </p>    

        <audio controls id="player"><source src="{{ document.sound_file.url }}"></audio>
    {% endfor %}
  </div>
  
  <div>  
    <a class="button" href="../upload"> Upload your version</a>
  </div>

{% endblock %}

谢谢!

追溯: 如果我尝试通过添加以下内容在视图中应用过滤器:

def get_queryset(self):
    return SoundFile.objects.last()

所以整个视图是:

class SoundDownloadView(generic.ListView):

    model = SoundFile
    fields = ['sound_file']
    template_name = 'download.html'

    def get_queryset(self):
        return SoundFile.objects.last()

我收到以下回溯错误

Django Version:     3.1.7
Exception Type:     TypeError
Exception Value:    

'SoundFile' object is not iterable

Exception Location:     /Users/cameronharris/.virtualenvs/my_django_environment/lib/python3.9/site-packages/django/template/defaulttags.py,line 167,in render
Python Executable:  /Users/cameronharris/.virtualenvs/my_django_environment/bin/python3
Python Version:     3.9.2
Python Path:    

['/Users/cameronharris/django_test/Headroom','/Library/Frameworks/Python.framework/Versions/3.9/lib/python39.zip','/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9','/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/lib-dynload','/Users/cameronharris/.virtualenvs/my_django_environment/lib/python3.9/site-packages']

解决方法

您只将一个 SoundFile 对象传递给模板,然后您试图在 for 循环中迭代该 单个 对象,这就是为什么您得到 {{1 }} 错误。

ListView 用于显示对象列表。在这里,就您而言,您只有一个对象要表示,因此强烈建议使用 Detilview

但是如果你仍然想使用ListView,那么试试这个

'SoundFile' object is not iterable

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?