Просто выстрел в темноте, но, возможно, кто-то сможет предложить что-нибудь интересное.
Всякий раз, когда у меня есть формы , на мой взгляд, есть много if-else операторов, и трудно следовать логике. Есть ли какая-то особенность шаблона или языка Python, чтобы упростить это? У меня была эта проблема столько, сколько я себя помню, и до сих пор не нашел хорошего решения.
Вот пример: представление, которое отображает ту же страницу, если есть ошибки, и, если все хорошо, выполняет поиск (в модели) и возвращает страницу с графиками:
def analysis(request):
context = {'main_navigation' : 'analysis'}
context['no_results'] = False
template = 'analysis/analysis.html'
# Search params?
if not request.GET:
form = AnalysisSearchForm()
context['form'] = form
else:
form = AnalysisSearchForm(request.GET)
context['form'] = form
if form.is_valid():
# Do the search
results = form.search()
if len(results) > 0:
context['results'] = json.dumps(results, default=encode)
context.update(form.cleaned_data)
# Add the compare form
context['compare_form'] = CompareForm();
# Add critical level if there is one.
part = form.cleaned_data.get('part', None)
if part:
level = Level.get(part, "Default")
if level is not None:
context['level'] = level.value
template = 'analysis/analysis_graphs.html'
else:
context['no_results'] = True
return render_to_response(template, context,
context_instance=RequestContext(request))
Как вы можете видеть, вышеприведенное уже упрощено путем перемещения всей логики запросов в метод form.search () , который использует cleaned_data формы, чтобы (в этом случае) связаться с удаленным API и получить результаты.