2016-08-07 2 views
0

У меня есть форма, которая должна быть подтверждена из шаблона, которые оба являются следующим:Джанго форма не подтверждена

from django.shortcuts import render 
from django.forms import Form 
from django import forms 
from django.http import HttpResponse 
import MyIB.settings 
import os 

class MainForm(Form): 
    name = forms.CharField() 
    subject = forms.CharField() 
    text = forms.Textarea() 
    file = forms.FileField() 
    password = forms.CharField() 

def mainpage(request): 
    if request.method == 'POST': 
     form = MainForm(request.POST, request.FILES) 

     if form.is_valid(): 
      handle_uploaded_file(request.FILES['file']) 
      return HttpResponse('Ok') 
     else: 
      return HttpResponse('not ok') 

    form = MainForm() 
    return render(request, "main.html", {'form': form}) 

def handle_uploaded_file(file): 
    name = file.name 

    with open(os.path.join("static\img", "{0}".format(name)), 'wb+') as destination: 
     for chunk in file.chunks(): 
      destination.write(chunk) 

И как мой шаблон идет:

{% load staticfiles %} 
<!DOCTYPE html> 
<html lang="en" xmlns="http://www.w3.org/1999/html"> 
<head> 
    <meta charset="UTF-8"> 
    <title>{{ siteTitle }}</title> 
    <link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/main.css"> 
</head> 
<body> 
{% include 'header.html' %} 

<form method="post"> 
    {% csrf_token %} 
    <label class="label" for="name">Name</label> 
    <input id="namebox" type="text" name="name" /> 
    </br> 
    <label class="label" for="subject">Subject</label> 
    <input id="subjectbox" type="text" name="subject" /> 
    </br> 
    <label class="label" for="text">Text</label> 
    <textarea id="textedit" name="text"></textarea> 
    </br> 
    <label class="label" for="file">File</label> 
    <input type="file" name="file" /> 
    </br> 
    <label class="label" for="password">Password</label> 
    <input type="password" id="passwordbox" name="password" /> 
    </br> 
    <input type="submit" /> 
</form> 

</body> 
</html> 

Но каждый раз, когда я отправить что-то через форму в моем шаблоне, он не проверен и переключается на «не нормально». Пожалуйста помоги. Благодарю.

Редактировать Как сейчас:

<form enctype="multipart/form-data" method="post"> 
    {% csrf_token %} 
    <table> 
    <ul> 
     {{ form.as_table }} 
    </ul> 

    </table> 
    <input type="submit" value="Submit" /> 
</form> 

ответ

2

Несколько предложений:

  1. Когда including file inputs in the form, вы должны использовать правильный <form> тег:

    В чтобы загрузить файлы, вам нужно убедиться, что ваш элемент правильно определяет ENCTYPE как «многочастные/фасонные данные»:

    <form enctype="multipart/form-data" method="post" action="/foo/"> 
    

    Это, вероятно, является причиной вашей проблемы проверки.

  2. API форм является мощным и обрабатывает такие вещи, как rendering forms for you.

    Вы должны использовать это, потому что рендеринг по умолчанию также отображает ошибки поля поля, которые вы в настоящее время не выполняете (так что у вас нет способа узнать, какое поле не удалось проверить - если вы делали ошибки, вы знали бы, что проблема был с вводом файла).

    В качестве альтернативы вам необходимо указать render form errors manually.

+0

Он все еще не работает! Я использовал '{{form.as_table}}', и теперь он отображает форму правильно, но она все еще не проверена. Зачем? – Chubak

+0

Я не могу сказать, почему, не глядя на ваш пересмотренный код. – solarissmoke

+0

Я добавил свой пересмотренный код. Понимаете, он всегда запрашивает данные и дает мне ошибку «это поле обязательно», хотя я заполняю поле. – Chubak

Смежные вопросы