Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 15, 2010 22:40:47

Igor Shmigoff
От:
Зарегистрирован: 2010-11-13
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Рендерится с ошибкой

Ребята, привет.
Есть пара вопросов.
1) Наткнулся в документации на подобное этому:

class FileToUpload(models.Model):   
title = models.CharField(max_length=50)
file = models.FileField(upload_to='uploaded')

class FileToUploadForm(ModelForm):
class Meta:
model = FileToUpload
И я не понимаю, вот такой вызов класса form что дает и как это использовать? Чем это отличается от простой инициализации в файле form.py. Просто я не понял в чем прикол.

2) Закачиваю файл в бд (Т.е. для модели написанной выше создал шаблон-форму, вызвав тэг {{ form.as_p }} ) и файл закачивается, но выдается ошибка в странице джанго:

NoReverseMatch at /Bookstore/book/

Reverse for 'django.views.generic.list_detail.object_detail' with arguments '()' and keyword arguments '{'object_id': 3}' not found.
Как это решается обычно? Думаю это связано с тем, что после закачки не рендерится страница, которая должна быть в ответ на нажатие кнопочки сабмит. Но пока не понял как исправить.

Спасибо



Офлайн

#2 Ноя. 16, 2010 01:37:22

AlexKiriukha
От:
Зарегистрирован: 2008-02-03
Сообщения: 81
Репутация: +  0  -
Профиль   Отправить e-mail  

Рендерится с ошибкой

И я не понимаю, вот такой вызов класса form что дает и как это использовать?
Можно код? А то что-то не ясно.

и файл закачивается, но выдается ошибка в странице джанго
Хотелось бы увидеть urls.py, который отвечает за /Bookstore/book/



Офлайн

#3 Ноя. 16, 2010 20:00:43

Igor Shmigoff
От:
Зарегистрирован: 2010-11-13
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Рендерится с ошибкой

AlexKiriukha
1)Не понял что за код нужен… Просто, в файле model.py можно определять класс форм (наследуется от ModelForm). Как указано в документации, можно сделать так как написано выше, а можно создавать файл forms.py и в нем определять класс вместе с полями. Вот мне и не ясно, в чем разница, а если есть, то в чем?

2) mysite/urls.py

from django.conf.urls.defaults import *

from django.conf.project_template.urls import urlpatterns
from django.views.generic.list_detail import object_list, object_detail
from django.views.generic.create_update import create_object
from mysite.models import FileToUpload

create_info_file = {'model': FileToUpload}
display_info_file = {'queryset': FileToUpload.objects.all()}

urlpatterns = patterns('',
url(r'^$', 'django.views.generic.simple.direct_to_template',
{'template': 'enter.html'}),

url(r'^upload/$', 'django.views.generic.simple.direct_to_template',
{'template': 'upload.html'}),
url(r'^upload/file/$', create_object, create_info_file), )
Ошибка:
NoReverseMatch at /mysite/upload/file/

Reverse for 'django.views.generic.list_detail.object_detail' with arguments '()' and keyword arguments '{'object_id': 7}' not found.



Офлайн

#4 Ноя. 16, 2010 23:45:33

AlexKiriukha
От:
Зарегистрирован: 2008-02-03
Сообщения: 81
Репутация: +  0  -
Профиль   Отправить e-mail  

Рендерится с ошибкой

1) похоже я первое криво распарсил. Вобщем можно формы выносить в отдельный файл, а можно и нет. Так же как и admin и сигналы. Я выношу - так мне удобнее/управляемее.

2) Reverse for ‘django.views.generic.list_detail.object_detail… Там случайно в редиректе (предположительно после сохранения) нет reverse(’django.views.generic.list_detail.object_detail', object_id=7) нету? К тому же в urls.py что-то не видно имён для url'ов. Reverse делает обратное преобразование от имени и параметров к конкретному url.



Офлайн

#5 Ноя. 17, 2010 00:34:57

Igor Shmigoff
От:
Зарегистрирован: 2010-11-13
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Рендерится с ошибкой

AlexKiriukha, спасибо
Первое примерно понял, еще почитаю - не хочу тупыми вопросами забрасывать.
А вот со вторым я сижу щас, и не врубаюсь.
У меня после закачки файла нет никакого урла.
На данный момент что есть:
форма для закачки файла:
# FileToUpload_form.html

<form action="" method="post" enctype="multipart/form-data" >{% csrf_token %}
{{ form.as_p }}<br>
<input type="submit" name="submit" value="Upload" id="submit">
</form>
если в action попробовать вставить перенаправление на что нить, то сразу все рушится и не закачивается. Если же просто “” оставить, то закачивается куда нужно (в моделе в параметре FileField(upload_to=… указан путь - это важно для меня), но выбрасывается такая ошибка, что я написал в предыдущем посте.
Хотел сделать примерно так:
# FileToUpload_form.html
<form action="/success/" method="post" enctype="multipart/form-data" >{% csrf_token %}
{{ form.as_p }}<br>
<input type="submit" name="submit" value="Upload" id="submit">
</form>
# views.py
def success(request):
errors = []
if request.method == 'POST':
if form.is_valid():
# Тут нужно обработчик закачки сделать. Какой - не врубаюсь. В документации http://docs.djangoproject.com/en/dev/topics/http/file-uploads/?from=olddocs мне не ясен их обработчик.
return HttpResponseRedirect('/ok')
else:
errors.append('Required everything!')
return render_to_response('FileUpload_form.html', {'errors': errors})
Вот сижу и репу чешу. Если есть идеи, буду признателен.



Офлайн

#6 Ноя. 17, 2010 03:01:04

AlexKiriukha
От:
Зарегистрирован: 2008-02-03
Сообщения: 81
Репутация: +  0  -
Профиль   Отправить e-mail  

Рендерится с ошибкой

Предполагаем FileToUploadForm из первого поста, пишем в “каноническом” стиле:

def upload(request):
if request.method == 'POST':
form = FileToUploadForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('success_view_name')
else:
form = FileToUploadForm

return render_to_response('template_with_form.html', {'form': form}, RequestContext(request))
Код можно немного упростить, но так вроде нагляднее и ближе к документации. Так же редирект можно сделать на только что созданную модель, но это тоже другой вопрос.



Офлайн

#7 Ноя. 18, 2010 01:11:31

Igor Shmigoff
От:
Зарегистрирован: 2010-11-13
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Рендерится с ошибкой

AlexKiriukha Спасибо. Так ка Вы написали, заработало



Офлайн

#8 Ноя. 22, 2010 12:05:07

romankrv
От:
Зарегистрирован: 2008-05-23
Сообщения: 513
Репутация: +  0  -
Профиль   Отправить e-mail  

Офлайн

#9 Ноя. 22, 2010 21:08:03

Igor Shmigoff
От:
Зарегистрирован: 2010-11-13
Сообщения: 35
Репутация: +  0  -
Профиль   Отправить e-mail  

Рендерится с ошибкой

romankrv
Не догнал вопроса…



Офлайн

#10 Ноя. 22, 2010 21:59:59

AlexKiriukha
От:
Зарегистрирован: 2008-02-03
Сообщения: 81
Репутация: +  0  -
Профиль   Отправить e-mail  

Рендерится с ошибкой

winpdb - это pdb, но только с окошечками. Pdb - дебаггер для python. Ещё в дикой природе встречается ipdb.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version