Я не использовал Google App Engine, но так я бы делал на чистой установке Django 1.3:
forms.py:
from django import forms
from django.forms import fields
class UploadImageForm(forms.Form):
image_file = fields.ImageField()
views.py:
from django.shortcuts import render_to_response
from django.template import RequestContext
from NAME_OF_YOUR_APP.forms import UploadImageForm
def addImage(request):
if request.method == 'POST':
upload_image_form = UploadImageForm(data=request.POST, files=request.FILES)
if upload_image_form.is_valid():
image_file = request.cleaned_data['image_file']
# do something with the image...
return ...
else:
upload_image_form = UploadImageForm()
context = {'form':upload_image_form}
return render_to_response('path/to/upload_template.html', context, context_instance=RequestContext(request))
upload_template.html:
<form enctype="multipart/form-data" action="" method="post">
{% csrf_token %}
<table>
<tr>
<td>{{ form.image_file.label_tag }}</td>
<td>{{ form.image_file }}</td>
<td>{% if form.image_file.errors %}{% for error in form.image_file.errors %}{{ error }}{% endfor %}{% endif %}</td>
</tr>
</table>
<input type="submit" value="Submit"/>
</form>
Код вашего шаблона выглядит хорошо (его нет {% csrf_token %}
что я не уверен, если GAE нужно или нет).Ваш код представления должен проверить, является ли запрос POST запросом или нет.
В моем примере я создал форму с именем UploadImageForm, которая принимает один image_file
для загрузки.Логика работает так:
- Пользователь заходит на example.com/upload_image
addImage()
Запускается.Поскольку это GET, а не POST-запрос, он создает пустой UploadImageForm () и отображает его в upload_template.html. - Пользователь отображает форму.
- Пользователь заполняет формуи отправляет изображение.
- Сервер получает запрос POST, и снова вызывается
addImage()
. - Мы связываем данные загруженного файла с UploadImageForm.
- Если ошибок нет(Например, upload_image_form.is_valid () - True), мы извлекаем файл image_file из cleaned_data, и затем можем что-то с ним сделать.
- Если есть ошибки (upload_image_form.is_valid () - False), шаблонповторно отображается с сообщениями об ошибках.