【问题标题】:django output writing to a text file as temporary storage (over-written with each submission)django 输出写入文本文件作为临时存储(每次提交时覆盖)
【发布时间】:2016-02-16 13:42:02
【问题描述】:

我已经设法使用 django 配置了一个系统,该系统允许我将文件上传到我的媒体文件夹。我(使用 simple-html)包含一个下拉菜单,该菜单将指定在管道中处理上传文件时将考虑的参数。

<form action="{% url "list" %}" method="post" enctype="multipart/form-data">
    <tr>
        {% csrf_token %}
        <p>{{ form.non_field_errors }}</p>

        <p>{{ form.docfile.label_tag }} {{ form.docfile.help_text }}</p>

        <p>
            {{ form.docfile.errors }}
            {{ form.docfile }}
        </p>
    </tr>

    <tr>    
    <th>Genome Dataset</th>
     <TD WIDTH = 80% ALIGN=left VALIGN=top>
      <SELECT NAME='genome' ID='genome'>
        <OPTION>All</OPTION>
        <OPTION>Neanderthal</OPTION>
        <OPTION>hg38 Human</OPTION>
        <OPTION>Denisovan</OPTION>
      </SELECT>
    </tr>   
    <p><input type="submit" value="Upload"/></p>
    </form>

我需要将选定的下拉选项发送到文本文件。我试图在views.py中这样做。然而。当文件成功上传到媒体文件夹时,媒体文件夹中没有任何文本文件清单 - 这是需要的。

def GenomesView(request):
   if request.method == 'GET':
     getgen = request.GET.get('genome')
     content = ContentFile(getgen)
     f = open(os.path.join(settings.MEDIA_ROOT, 'file.txt'), 'w')
     myfile = File(f)
     myfile.write(getgen)
     myfile.close()

媒体文件夹的位置如下设置。

  MEDIA_URL = '/media/'
  MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

因此我的问题是如何从下拉列表中选择所选选项,并且每次将文件上传到站点时,选择都会发送到文本文件,每次新提交时都会覆盖该文本文件(充当所选选项参数的临时存储,即“Neanderthall”等,如上面的代码所示)?

【问题讨论】:

    标签: python django file-handling


    【解决方案1】:

    看起来您正在使用表单来发布此数据,但仅当请求是 GET 时才写入文件。尝试将其更改为 POST。此外,由于request.POST.get('genome') 应该返回一个字符串供您写入文件,因此无需将其包装在ContentFile 中。试试这个:

    if request.method == 'POST':
        getgen = request.POST.get('genome')
        with open(os.path.join(settings.MEDIA_ROOT, 'file.txt'), 'w') as f:
            f.write(getgen)
    

    我还更改了你的file handling to use a context manager

    【讨论】:

    • 感谢您,不幸的是它仍然无法正常工作,但我们会继续努力 :)
    • 详细说明“不工作”。你有错误吗?如果有,是什么?
    • 对不起,我的意思是媒体文件夹中根本没有出现文本文件(但上传的文件确实出现了)......没有实际错误......我们还认为“tempfile”模块为它可能更“pythonic”
    猜你喜欢
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 2016-02-11
    • 1970-01-01
    • 2012-02-05
    • 2012-10-27
    相关资源
    最近更新 更多