2015-01-19 2 views
0

Я работаю над веб-страницей, которая берет набор названий песен и имен художников и находит тексты песен.Ничего не возвращается в процессе обработки POST-формы

У меня есть минимальная страница search с формой POST и кнопкой отправки.

def search(request): 
    formset = modelformset_factory(Song, fields=('title', 'artist', 'song_pk')) 
    return render(request, 'lyricfind/search.html', {'formset': formset}) 

для зрения, и

<form method="post" action="/results/"> 
    {% csrf_token %} 
    {{ formset }} 
    <input type="submit" value="Submit"> 
</form> 

для шаблона.

Однако, когда я ввожу данные в полях ввода текста и нажмите кнопку отправки, ошибка

The view lyricfind.views.results didn't return an HttpResponse object. It returned None instead. 

брошено.

Я не вижу причину этой ошибки.

Я не был уверен в том, как я должен написать свое мнение, поэтому взгляд может быть причиной.

def results(request): 
    SongFormSet = modelformset_factory(Song) 
    if request.method == 'POST': 
     formset = SongFormSet(request.POST) 
     if formset.is_valid(): 
      return HttpResponseRedirect(reverse('lyricfind/results.html', {'formset': formset})) 

    return render(request, 'lyricfind/search.html', {'formset': formset}) 

Шаблон, results.html, просто содержит простой текст.

Я считаю, что URLs правильно настроены

url(r'^', include('lyricfind.urls', namespace='lyricfind')), 

, а затем в lyricfind.urls,

url(r'^$', views.search, name='search'), 
url(r'^results/$', views.results, name='results'), 
+0

Я бы поставил вас есть ошибка в HttpResponseRedirect , в пределах наоборот, который, вероятно, возвращает None при ошибке (поскольку lyricfind/results.html не является URL-адресом, определенным в u rls.py. reverse требует либо «поиск», либо «результат», один из ваших URL-адресов, которые определены. зачем использовать Redirect/Reverse здесь? –

ответ

-1

попробуйте изменить код следующим образом:

def results(request): 
    SongFormSet = modelformset_factory(Song) 
    if request.method == 'POST': 
     formset = SongFormSet(request.POST) 
     if formset.is_valid(): 
      # SAVE or Process Data Then: 
      return redirect('/some-save-confirmation-result-page') 
      # or if your doing just a search, should use GET and can return a rendered template. 

    return render(request, 'lyricfind/search.html', {'formset': formset}) 
+0

, но в примере, который я видел, он использовал HttpResponseRedirect. Почему это не правильно в моем случае? Кстати, это сработало. – user2418202

+0

Возможно, перенаправление сработало бы. но я не понимаю, почему вы в этом случае. вы пытаетесь сделать другой шаблон, если у вас есть результаты. так зачем перенаправлять? просто отрисуйте шаблон. –

+0

Почему кто-то проголосовал за мой ответ? –

Смежные вопросы