0

I have used python3.7 and django 2.1 and for django app models and views diretory have separated folder and files.

  • Project Name : fusion
  • App Name : admin_lte

Getting bellow error

ValueError at /csv/ The view django_adminlte.views.file_csv_view.file_csv_show.file_csv_show didn't return an HttpResponse object. It returned None instead.


Traceback :

Traceback (most recent call last):
  File "C:\Users\parth\Desktop\admin_lte\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\parth\Desktop\admin_lte\lib\site-packages\django\core\handlers\base.py", line 137, in _get_response
    "returned None instead." % (callback.__module__, view_name)
ValueError: The view django_adminlte.views.file_csv_view.file_csv_show.file_csv_show didn't return an HttpResponse object. It returned None instead.
[15/Feb/2019 17:23:57] "POST /csv/ HTTP/1.1" 500 67126

I already make all init.py file for separated folder.

View file : file_csv_show.py


   from django.shortcuts import render,redirect
   from django_adminlte.forms import File_csvForm
   from django_adminlte.models import file_csv

def file_csv_show(request):
    if request.method == 'POST':
        form = File_csvForm(request.POST,request.FILES) #request.POST = geting title/auth request.FILES = for book upload
        if form.is_valid():
            try:
                form.save()
                return redirect("file_csv_show")
            except:
                pass
    else:
        form = File_csvForm()
        return render(request,'adminlte/file_csv_index.html',{'form' : form})


models file : file_csv.py

from django.db import models

# Create your models here.
class File_csv(models.Model):
    title = models.CharField(max_length=50)
    csv_files = models.FileField(upload_to='files/csv')

    class Meta:
        db_table = "csv"

    def __str__(self):
        return self.title

html file

{% extends 'adminlte/base.html' %}
{% load crispy_forms_tags %}
{% block content %}

{% if user.is_authenticated %}
    <h2>Upload</h2>
    <form method="post" enctype="multipart/form-data" action="{% url "file_csv" %}">
        {% csrf_token %}
        <input type="file" name="document">
        <button type="submit">Upload File</button>
    </form>
    {% if url %}
        <p>Uploaded File : <a href="{{url}}">{{url}}</a></p>
    {% endif %}
{% endif %}
{% endblock %}
urls.py file

from django_adminlte import views
from django_adminlte.views.file_csv_view import file_csv_show

urlpatterns = [
      path('csv/',views.file_csv_view.file_csv_show,name='file_csv'),
]



I want to when file has been uploaded and after page redirect to index page


Parth Jani
  • 33
  • 1
  • 4
  • 12

1 Answers1

2

Your view has a problem. When the form is invalid it does not return anything.

def file_csv_show(request):
    if request.method == 'POST':
        form = File_csvForm(request.POST,request.FILES) #request.POST = geting title/auth request.FILES = for book upload
        if form.is_valid():
            try:
                form.save()
                return redirect("file_csv_show")
            except:
                # If the form is invalid, 
                pass
        # This part is missing:
        # Here you need an else for when the form is invalid.
        else:
            return render(request,'adminlte/file_csv_index.html',{'form' : form})
    else:
        form = File_csvForm()
        return render(request,'adminlte/file_csv_index.html',{'form' : form})
malberts
  • 2,488
  • 1
  • 11
  • 16