Ошибка NoReverseMatch при перенаправлении на страницу результатов - PullRequest
1 голос
/ 03 августа 2011

Я намеревался написать поисковое приложение от Django.
При перенаправлении на страницу результатов я получаю ошибку NoReverseMatch.
Я разместил здесь свои коды http://pastebin.com/AL4rG9NU

ИлиВы можете прочитать его ниже

urls.py

urlpatterns = patterns('pylucene.views',
    (r'^$', 'index'),
    (r'^search/$', 'search'),
)

views.py

def index(request):
     return render_to_response('pylucene/index.html', context_instance=RequestContext(request))


def search(request):
    query = request.POST['query']
    search_results = search_files(query)
    return HttpResponseRedirect(reverse('pylucene.views.results', args=(search_results,))) 

Ошибка:

NoReverseMatch at /pylucene/search/
 Reverse for 'pylucene.views.results' with arguments
 '([(u'Documents\\Dieu khien may tinh bang y nghi.txt', u'Dieu khien
 may tinh bang y nghi.txt'), '1 total matching documents.'],)' and
 keyword arguments '{}' not found.
def results(request, search_results):
return render_to_response('pylucene/results.html', {'search_results': search_results}, context_instance=RequestContext(request))

Я прочитал несколько похожих тем, но не могу решить свою проблему.Пожалуйста, помогите мне.
Большое вам спасибо.

1 Ответ

3 голосов
/ 03 августа 2011

Я думаю, что вы не понимаете, как работает функция reverse, а то, что вы пытаетесь, просто невозможно.

Для обратной функции ваш URL должен быть объявлен в urls.py, например:

#urls.py:
urlpatterns = patterns('blog.views',
    (r'^$', 'index'),
    url(r'^blog/(?P<slug>\d{4})/$', 'blog', name="blog-detail"),
)

Теперь в вашем коде вы можете сделать

reverse('blog-detail', args=('django-urls',))
# the resolt of this is
# /blog/django-urls/

Вот как работает обратный ход.


Реальный ответ

Iдумаю, что вам не нужны 2 просмотра, но если вы действительно хотите: вы должны сделать это, чтобы передать весь уже выполненный запрос

def search(request):
    query = request.POST['query']
    search_results = search_files(query)
    return results(request, search_results)

, но я думаю, что лучшее, что вы можете сделать, это (используя GET):

def search(request):
    query = request.GET['query']  # I think using get is better because you are GETing info
    search_results = search_files(query) # better if returns a generator
    return render_to_response('pylucene/results.html',
                              {'search_results': search_results},
                              context_instance=RequestContext(request) 
...