Найти - Пользователи
Полная версия: Рендерится с ошибкой
Начало » Django » Рендерится с ошибкой
1 2
Igor Shmigoff
Ребята, привет.
Есть пара вопросов.
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.
Как это решается обычно? Думаю это связано с тем, что после закачки не рендерится страница, которая должна быть в ответ на нажатие кнопочки сабмит. Но пока не понял как исправить.

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

и файл закачивается, но выдается ошибка в странице джанго
Хотелось бы увидеть urls.py, который отвечает за /Bookstore/book/
Igor Shmigoff
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.
AlexKiriukha
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.
Igor Shmigoff
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})
Вот сижу и репу чешу. Если есть идеи, буду признателен.
AlexKiriukha
Предполагаем 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))
Код можно немного упростить, но так вроде нагляднее и ближе к документации. Так же редирект можно сделать на только что созданную модель, но это тоже другой вопрос.
Igor Shmigoff
AlexKiriukha Спасибо. Так ка Вы написали, заработало
romankrv
winpdb?
Igor Shmigoff
romankrv
Не догнал вопроса…
AlexKiriukha
winpdb - это pdb, но только с окошечками. Pdb - дебаггер для python. Ещё в дикой природе встречается ipdb.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB