Спасибо большое за советы. На выходных займусь плотным перепроектированием :) Попробую сделать иерархию и/или переписать часть на cbv и посмотреть что получится.
—–
оффтопик
JOHN_16, esp рулез!)
def foo(request, param): instance=get_object_or_404(MyModel, pk=param) if request.method='POST': form=MyForm(request.POST) if form.is_valid: form.save() return HttpResponseRedirect(reverse( 'name' )) else: return render_to_response('template.html', {'object':instance, 'form':form}) else: form=MyForm() return render_to_response('template.html', {'object':instance, 'form':form})
def foo(request, param): instance = get_object_or_404(MyModel, pk=param) form = MyForm(request.POST or None) if request.method == 'POST' and form.is_valid(): form.save() return redirect('name') return render('template.html', {'object':instance, 'form':form})
def contact(request): if request.method == 'POST': form = ContactForm(request.POST) if form.is_valid(): cd = form.cleaned_data send_mail( cd['subject'], cd['message'], cd.get('email', 'noreply@example.com'), ['siteowner@example.com'], ) return HttpResponseRedirect('/contact/thanks/') else: form = ContactForm() return render_to_response('contact_form.html', {'form': form})
”
def contact(request): form = ContactForm(request.POST or None) if form.is_valid(): form.send_mail() return redirect("thanks") return render('contact_form.html', {'form': form})
kmike
пишется вот так:
def foo(request, param):
instance = get_object_or_404(MyModel, pk=param)
form = MyForm(request.POST or None)
if request.method == ‘POST’ and form.is_valid():
form.save()
return redirect('name')
return render('template.html', {'object':instance, ‘form’:form})
class MyView(UpdateView): template_name = 'template.html' form_class = MyForm
kmikedef contact(request): form = ContactForm(request.POST or None) if form.is_valid(): form.send_mail() return redirect("thanks") return render('contact_form.html', {'form': form})
class MyContactView(EmailView): form_class = ContactForm template_name = 'contact_form.html'
kmikeВам не кажется, что вы описываете последствия проблемы выше уровнем, выбрав CBV козлом отпущения?
Мне не нравятся generic views на CBV, т.к. для того, чтоб понять, что происходит во вьюхе, нужно прочитать код нескольких миксинов и в голове построить, что в каком порядке выполняется (особенно если есть вызовы super()), с учетом MRO. С вьюхой на функциях “поток выполнения” читается сразу, а с классом он то “заныривает” куда-то во внутренности джанги, то “выныривает” оттуда.
kmikeАд есть везде. Вот мнение, с которым я во многом согласен. Тут есть и пример заныривания для view-функций, и пример “ада” даже не из документации,- из исходников Джанги ;)
Вот это разве не ад (пример из документации)?