django输出写入文本文件作为临时存储(每次提交重写)

时间:2016-02-16 13:42:03

标签: python django file-handling

我设法使用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”等,如上面的代码所示)?

1 个答案:

答案 0 :(得分:0)

看起来您正在使用表单来发布此数据,但只有在请求是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