【问题标题】:Getting CSV saving in the document folder将 CSV 保存在文档文件夹中
【发布时间】:2021-10-19 17:39:31
【问题描述】:

我知道这个问题可能出现了数百万次,但我无法让我的代码工作。

我想把csv上传到一个文件夹,这样我可以对它做进一步的操作。

我认为问题可能出在我的 HTML 代码中,但不确定在哪里。 我要保存的文件夹是documents/,我没有将它添加到settings.py,但我看到其他人也没有添加它。

我的代码如下: 主urls.py


from django.contrib import admin
from django.urls import path
from django.conf.urls import include
from mainsite import views as main

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', main.index, name= 'index'),
    path('contact/', include('contact.urls')),
    path('explanation/', include('modelexpl.urls')),
    path('uploads/', main.model_form_upload, name='model_form_upload')


]

应用 urls.py

from django.shortcuts import render
from django.http import HttpResponse
from django.urls import path
from mainsite import views
# Create your views here.

urlpatterns = [
path('', views.index, name='index')
]

应用的模型。

from django.db import models

# Create your models here.

class Document(models.Model):
    description = models.CharField(max_length=200, blank= True)
    document = models.FileField(upload_to='documents/')
    uploaded_at = models.DateTimeField(auto_now_add=True)

应用的浏览量

from django.shortcuts import render
from django.http import HttpResponse
from mainsite.models import Document
from mainsite.forms import DocumentForm

# Create your views here.

def index (request):
    placeholder = {'test' : 'test'}
    documents = Document.objects.all()
    return render(request, 'mainsite/index.html', { 'documents': documents })


def model_form_upload(request):
    if request.method == 'POST':
        form = DocumentForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/success/url/')
            print("uploaded")

    else:
        form = Upload()
        print("trying")

    return render(request, 'mainsite/index.html', {'form' : form})

HTML

{% block content %}

  <div class="form-group">
    <label for="exampleFormControlFile1">Make sure your csv doesn't exceed 250mb!</label>
    <br>


    <form action = "{% url 'index' %}" method="POST" enctype="multipart/form-data">
      {% csrf_token %}
      {{ form.as_p }}

    <input type="file" class="form-control-file" id="exampleFormControlFile1" method="post" enctype="multipart/form-data">
    <button type="submit">Upload</button>

  </div>
</form>
{% for obj in documents %}
  <p>File uploaded at: <a href="{{ obj.document.url }}">{{ obj.document }}</a></p>
        </div>
      </div>
    </div>
    {% endfor %}
    {% endblock %}

感谢任何帮助,我花了很长时间,真的迷路了!

另外,我打算使用这个保存的 csv 来启用 ML 模型,然后在处理后返回另一个 csv,你认为这在速度和使用 Django 方面是最有效的方法吗? (我是数据科学家/统计学家,这是我的业余爱好项目)

【问题讨论】:

  • 只是为了添加,当我点击提交时,页面只是刷新扩展,我相信是 csrf 令牌,没有文件被保存的迹象。
  • 对于用户上传的文件,您必须在 settings.py 中设置您的媒体设置。有关更多信息,请参阅文档docs.djangoproject.com/en/3.2/topics/files
  • @wjh18 我已经添加了 MEDIA_URL = '/documents/' MEDIA_ROOT = os.path.join(BASE_DIR, 'documents') 但仍然没有

标签: python html python-3.x django


【解决方案1】:

在您的 HTML 表单中,您将操作设置为错误的视图,以便在提交后处理表单。

你有:

<form action = "{% url 'index' %}" method="POST" enctype="multipart/form-data">

改成:

<form action = "{% url 'model_form_upload' %}" method="POST" enctype="multipart/form-data">

【讨论】:

  • 感谢您的评论,但不幸的是,这并没有解决问题:(
  • 在保存表单之前打印 forms.errors,您的表单中可能有错误
  • 我已经重写了整个代码,上面的html中有一个错误,当我没有输入'/'时......实际上花了6个小时在这样一个简单的错误上!
  • 感谢您的帮助,我接受了您的回答 :)
  • 不客气,编程就是这么美,
猜你喜欢
  • 2015-10-05
  • 1970-01-01
  • 2012-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多