Django, проблема с запросом на рендеринг: "Представление main.views.licz не вернуло объект HttpResponse. Вместо этого оно вернуло None".

Я пытаюсь сделать сайт и у меня проблема с загрузкой файла. В админке сайта я могу загрузить и импортировать любой файл, но когда я создаю представление, я получаю следующее: "Представление main.views.licz не вернуло объект HttpResponse. Вместо этого оно вернуло None". Вот код из main.models:

class Plik(models.Model):
    file = models.FileField(upload_to='uploads/')

Код из файла forms.py:

class upload(forms.Form):
    title = forms.CharField(max_length=50)
    file = forms.FileField()

И код из файла views.py:

def licz(request):
    if request.method == "POST":
        form = upload(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect("main/licz.html", {"form":form})
        else:
            form = Plik()
        return render(request, "main/licz.html", {"form":form})

Plz Я пытаюсь решить это уже 5 дней...

def licz(request):
    if request.method == "POST":
        form = upload(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect("main/licz.html", {"form":form})
        else:
            form = Plik()
        return render(request, "main/licz.html", {"form":form})

    # if request is GET, python will execute this part of the function

Ваша функция livz ничего не возвращает на запрос GET. Если оператор возврата не задан, Python вернет None.

return render(...) выполняется только на POST запросе (когда форма отправлена) с недействительной формой.

Вам необходимо также отобразить вашу страницу на другом методе запроса. Типичное представление формы должно выглядеть следующим образом (обратите внимание на отступ):

def form_view(request):
    if request.method == 'POST':
        form = MyForm(data=request.POST)
        if form.is_valid():
            # do stuff with the form
            return HttpResponseRedirect('/success-url')
    else:
        form = MyForm()

    return render('my-template', {'form': form})

Обратите внимание на условия (if/else/...) и убедитесь, что ваша страница возвращает ответ при любом возможном пути выполнения кода.

def licz(request):
    if request.method == "POST":
        form = upload(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect("main/licz.html")
        else:
            form = Plik()
    return render(request, "main/licz.html", {"form":form})
Вернуться на верх