NoReverseMatch от Django: Форма - PullRequest
       44

NoReverseMatch от Django: Форма

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

Мое приложение из загруженного файла CSV должно прочитать значения заголовков и передать эти заголовки в ChoiceField на следующем экране.

При выборе выбранного элемента ChoiceField, Я должен отобразить этот элемент обратнона экране .

После получения файла я сделал тип файла global, чтобы получить к нему доступ из других методов. Теперь после отправки загруженного файла вместо того, чтобы получить экран с выпадающим экраном ChoiceField, я получаю NoReverseMatch . Что я делаю не так?

enter image description here

1.visualize_view.html

{% extends 'base.html' %}

{% block content %}

<form method="post">
   {% csrf_token %}
   {{ expense_form.as_p }}
</form>

{% endblock %}

2.simple_upload.html

{% extends 'base.html' %}

{% block content %}
  <form method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="file" name="myfile">
    <input type="submit">Upload</button>
  </form>

{% endblock %}

3.urls.py

from django.conf.urls import url
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static
from uploads.core import views

urlpatterns = [
    url(r'^login', views.loginForm, name='loginForm'),
    url(r'^uploads/', views.simple_upload, name='simpleUpload'),
    url(r'^admin/', admin.site.urls),
    url(r'^visualize_view/', views.visualize_view, name = 'visualizeView'),
]

urlpatterns += static(settings.MEDIA_URL, document_root=settings.AKASH_ROOT)

4.view.py

from django.http import HttpResponse
from django.shortcuts import render, redirect
from django.core.files.storage import FileSystemStorage
from uploads.core.models import Document
from .forms import ExpenseForm

def simple_upload(request):
    if request.method == 'POST' and request.FILES['myfile']:
        global myfile
        myfile = request.FILES['myfile']
        return redirect(request, 'core/visualize_view.html')
    else:
        return render(request, 'core/simple_upload.html')


def visualize_view(request):
    if request.method == 'POST':
        expense_form = ExpenseForm(request.POST)
        if expense_form.is_valid():
            return HttpResponse(expense_form.cleaned_data['columns'])
        else:
            return HttpResponse("This form was not valid.")
    else:
        fs = FileSystemStorage()
        fs.save(myfile.name, myfile)
        for row in myfile:
            headerlist = row.decode('utf-8').split(",")
            break
        expense_form = ExpenseForm(headerlist)
        return render(request, 'core/visualize_view.html', {'expense_form': expense_form})

5.ExpenseForm.py

from django import forms

class ExpenseForm(forms.Form):

     def __init__(self, headerlist, *args, **kwargs):
        super(ExpenseForm,self).__init__(*args, **kwargs)
        CHOICES = [(i, header) for i, header in enumerate(headerlist)]
        columns = forms.ChoiceField(choices=CHOICES)
...