2013-07-30 3 views
2

Я застрял в точке, где я должен был бы набирать поисковый запрос на странице, и django должен вернуть список соответствующих страниц, если таковой имеется. Но он не показывает мне никаких страниц, даже если он там, и дает мне эры. Предположим, у меня есть одна страница, содержание которого один, когда я ищу, я получаю эту ошибку:django search page not found error

Page not found (404)

Request Method:GET

Request URL: http://xxx.x.x.x:8000/search/csrfmiddlewaretoken=W6n1O1vQCMyDojxEkR4mPnRrVz9lYVt1&q=one

No FlatPage matches the given query.

Пожалуйста, укажите мне, где я делаю неправильно. Спасибо.

мой views.py:

from django.http import HttpResponse 
from django.template import loader, Context 
from django.contrib.flatpages.models import FlatPage 

def search(request): 
    query = request.GET['q'] 
    resuts = FlatPage.objects.filter(content__icontains=query) 
    template = loader.get_template('search/search.html') 
    context = Context({ 
     'query':query, 
     'resuts':resuts 
    }) 
    response = template.render(context) 
    return HttpResponse(response) 

urls.py:

from django.conf.urls import patterns, include, url 
from django.contrib import admin 
admin.autodiscover() 

urlpatterns = patterns('', 
    url(r'^admin/', include(admin.site.urls)), 
    (r'^tinymce/(?P<path>.*)$', 'django.views.static.serve', { 'document_root': 'C:/Users/Kakar/web/cms/static/js/tinymce/' }), 
    (r'', include('django.contrib.flatpages.urls')), 
    (r'^search/$', 'search.views.search'), 
) 

settings.py:

In the installed-apps, I have installed 'search'.

default.html:

<html> 
    <head> 
     <title>{{ flatpage.title }}</title> 
    </head> 
    <body> 
     <form method="get" action="/search/"> 
     {% csrf_token %} 
      <p><label for="id_q">Search:</label> 
      <input type="text" name="q" id="id_q" /> 
      <input type="submit" value="Submit" /></p> 
     </form> 
     <h1>{{ flatpage.title }}</h1> 
     {{ flatpage.content }} 
    </body> 
</html> 

search.html:

<html> 
    <head> 
     <title>Search</title> 
    </head> 
    <body> 
     <p>You searched for "{{query}}"; the results are listed below.</p> 
     {% if results %} 
      <ul> 
       {% for page in results %} 
        <li> 
         <a href="{{page.get_absolute_url}}">{{page.title}}</a> 
        </li> 
       {% endfor %} 
      </ul> 
     {% else %} 
      <p>No results.</p> 
     {% endif %} 
    </body> 
</html> 
+0

Попробуйте удалить «$» из шаблона URL. т.е. '(r '^ search /', 'search.views.search')' –

ответ

0

Попробуйте изменить порядок совпадений URL.

urlpatterns = patterns('', 
    url(r'^admin/', include(admin.site.urls)), 
    (r'^tinymce/(?P<path>.*)$', 'django.views.static.serve', { 'document_root': 'C:/Users/Kakar/web/cms/static/js/tinymce/' }), 
    (r'^search/$', 'search.views.search'), 
    (r'', include('django.contrib.flatpages.urls')), 
) 

Так же, как в the documentation

Кроме того, по какой-то причине вам не хватает ? в параметрах запроса.

Еще одна проблема: у вас есть опечатка. Вы отправляете resuts в контексте и делаете {{results}} в формате HTML

+0

Хорошо, теперь у меня есть html, но даже если у меня есть файл, он говорит 'Вы искали" one "; результаты перечислены ниже. ' ' Нет результатов .' – Robin

+0

Почему вы не «отдаете», а возвращаете «HttpResponse» – karthikr

+0

У вас есть опечатка. Вы отправляете 'resuts' в контексте и делаете' {{results}} 'в HTML – karthikr