Как отобразить количество строк и столбцов файла CSV в веб-приложении Django - PullRequest
1 голос
/ 07 октября 2019

Я хочу получить CSV-файл от пользователя, а затем просто хочу отобразить количество строк и столбцов в этом файле для пользователя

testapp.html:

<form method="POST" action="rowcol">
{% csrf_token %}
<input type="file" name="file" accept=".csv">

<button type="submit">Upload text</button>
</form>

views.py:

from django.shortcuts import render
from django.shortcuts import HttpResponse
import numpy as np
import pandas as pd

def testapp(request):
    return render(request, 'testapp.html', {})

def rowcol(request):
    if request.method == 'POST':
        file = request.POST["file"]
        dataset=pd.read_csv('file')
        count_row = dataset.shape[0]
        count_col = dataset.shape[1]
        ans=("<H1>%d,%d</H1>",count_row,count_col)
        return HttpResponse(ans)

urls.py:

from django.urls import path
from testapp import views

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

urls.py во внешней папке:

from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('testapp.urls')),
]

1 Ответ

0 голосов
/ 07 октября 2019

Здесь есть некоторые проблемы. Прежде всего, ваше path(..) столкновение друг с другом. Вам нужно указать другой путь для второго пути. Например:

# testapp/urls.py

from django.urls import path
from testapp import views

urlpatterns = [
    path('', views.testapp, name='testapp'),
    path(<b>'rowcol/'</b>, views.rowcol, name='rowcol'),
]

Далее в вашем шаблоне лучше использовать шаблонный тег {% url ... %} и установить enctype на multipart/form-data:

<form method="post" action="<b>{% url 'rowcol' %}</b>" <b>enctype="multipart/form-data"></b>
    {% csrf_token %}
    <input type="file" name="file" accept=".csv">
    <button type="submit">Upload text</button>
</form>

Наконец, на ваш взглядфункция, вы забыли отформатировать строку:

def rowcol(request):
    if request.method == 'POST':
        file = request.FILES['file']
        dataset=pd.read_csv(file)
        count_row, count_col = dataset.shape
        ans='<H1>%d,%d</H1>' % (count_row,count_col)
        return HttpResponse(ans)
    return HttpResponse('')
...