#python #django
#python #django
Вопрос:
Нет ошибок при нажатии кнопки загрузить. Но изображение не отображается там, где я указал, что оно должно. Укажите абсолютный путь в MEDIA_ROOT и укажите на него ссылку в (upload_to) параметре ImageField. Не уверен, чего мне не хватает.
Модель:
class FileUploadHandler(models.Model):
title = models.CharField(max_length=100)
file = models.ImageField(upload_to='/Python27/Lib/site-packages/django/bin/mideastinfo/wiki/static/')
Вид:
from models import Article, Edit
from forms import ArticleForm, EditForm
from forms import *
from PIL import Image
from models import FileUploadHandler
def image_upload(request):
if request.method == 'POST':
form = UploadImageForm(request.POST, request.FILES)
if form.is_valid():
FileUploadHandler(request.FILES['image'])
return render_to_response('wiki/gallery.html')
else:
form = UploadImageForm()
return render_to_response('wiki/gallery.html', RequestContext(request, {'form': form}))
Forms.py:
class UploadImageForm(forms.ModelForm):
class Meta:
model = FileUploadHandler
#image = forms.ImageField()
fields = ['title']
Комментарии:
1. Разрешено ли пользователю, использующему Django, записывать в /Python27/Lib/ ?
2. Это хороший вопрос. Я являюсь пользователем и в основном работаю по этому пути в качестве своей среды разработки
3. Кто-то еще предложил мне использовать относительный путь, а не абсолютный, но я читал в другом месте обратное. Какие-либо рекомендации существуют?
Ответ №1:
Я думаю, вы работаете слишком усердно. Вам не нужно напрямую вызывать модель FileUploadHandler для сохранения изображения.
Во-первых, ваша форма должна быть:
class UploadImageForm(forms.ModelForm):
class Meta:
model = FileUploadHandler
И ваше представление должно быть:
from forms import UploadImageForm
def image_upload(request):
form = UploadImageForm(request.POST or None, request.FILES or None)
if form.is_valid():
form.save()
return render_to_response('wiki/gallery.html', RequestContext(request, {'form': form}))
Поскольку вы используете ModelForm, вам просто нужно сохранить форму после ее проверки. Просто убедитесь, что поле file отображается в вашем шаблоне. Ранее вы исключали поле «файл» в своей форме, поэтому оно не работало.
Обновление: упростило ваш просмотр еще больше только потому, что…
Ответ №2:
Здесь вы не сохранили его в представлениях. Просто используйте это:
if request.method == 'POST':
form = UploadImageForm(request.POST, request.FILES)
if form.is_valid():
newfile = FileUploadHandler(title='anything', file=request.FILES['image'])
newfile.save()
Комментарии:
1. Это не сработало. Ранее я пытался добавить form.save в свой существующий код, и я получаю ошибку AttributeError. Данные привязаны к форме, верно? Так почему бы не form.save?
2. На самом деле, если вы используете
forms.Form
(в forms.py ) вы получите эту ошибку. Если вы используетеforms.ModelForm
вместо этого,form.save
будет работать.3. В модели? Я использую модели. Модель.
4. Я имел в виду этот класс
UploadImageForm()
в forms.py5. хм, внес изменения. Ошибки нет, но и сохранения тоже нет. Собираюсь добавить forms.py к вышеперечисленным
Ответ №3:
Решением может быть шаблон:
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
{{ form }}
<input type="submit" name="submit" value="Submit" />
</form>
УВЕДОМЛЕНИЕ: enctype="multipart/form-data"