2010-12-30 11 views
0

Я просто не понимаю, что здесь происходит, и я потратил много времени на отладку этой вещи (которую я взял непосредственно из книги Django). Функциональность поиска фактически работала в первый раз, когда я загрузил сайт. Затем мне пришлось выполнить некоторую отладку, чтобы заставить другие части работать, и функциональность поиска внезапно сломалась.Простая форма поиска Django Просто не работает

Когда я отправляю форму, я получаю 404, рассказываю мне, что «история не существует», хотя она фактически сохранена в моем админе (и, следовательно, в моей базе данных). Запрос Get, добавленный к URL-адресу, кажется правильным. Он объединяет несколько слов.

Я знаю, что это так просто, и это действительно сработало, прежде чем я не получу его. Также интересно, что книга, в которой я взяла этот код, не включала вторую Q после трубы (|). Я думал, что это опечатка, и всякий раз, когда я пытаюсь ее удалить, весь сайт выходит из строя (включая шаблон администратора). Это тоже странно.

from cms.models import Story, Category 
from django.db.models import Q 
from django.shortcuts import render_to_response, get_object_or_404 

def search(request): 
    if 'q' in request.GET: 
     term = request.GET['q'] 
     story_list = Story.objects.filter(
      Q(title__contains=term) | Q(markdown_content__contains=term)) 
     heading = "Search results" 
    return render_to_response("cms/story_list.html", locals()) 
+0

Отступы (в моем коде) верны. Я понимаю, что я испортил отступы в приведенном примере. – Ben

+0

Ваш код не поднимает '404' в любом месте, поэтому, возможно, есть проблема с конфигурацией' urls.py' ... –

+0

Я не знаю, я скопировал urls.py точно из книги, а остальная часть приложения работает только с хорошими urlpatterns + = patterns ('project.cms.views', \t url (r '^ category/(? P [- \ w] +)/$ ',' category ', name = "cms-category"), \t url (r'^search/$ ',' search ', name = "cms-search"), ) e. – Ben

ответ

1
if 'q' in request.GET: 
    q = request.GET['q'] 
    if not q: 
     errors.append('Enter a search term.') 
    else: 
     storylist = Story.objects.filter(title__icontains=q) 
     return render_to_response('search_result.html', 
      {'packages': packages, 'query': q}) 
    return render_to_response('cms/story_list.html', {'errors': errors}) 
2

Это проблема URLPATTERN, когда URL является http://localhost:8000/cms/search/?q=sec, он будет соответствовать URLPATTERN url(r'^(?P<slug>[-\w]+)/$', 'object_detail', info_dict, name="cms-story"), то программа найдет историю, чье имя, как q или чей markdown_content как q, но теперь ваш в базе данных нет истории, поэтому она скажет вам, что «история не существует», теперь вы можете сделать это вот так:

from django.conf.urls.defaults import * 
from cms.models import Story 

info_dict = {'queryset':Story.objects.all(), 'template_object_name':'story'} 

urlpatterns = patterns('cmsproject.cms.views', 
    url(r'^category/(?P<slug>[-\w]+)/$', 'category', name="cms-category"), 
    url(r'^search/$', 'search', name="cms-search"), 
) 
urlpatterns += patterns('django.views.generic.list_detail', 
    url(r'^(?P<slug>[-\w]+)/$', 'object_detail', info_dict, name="cms-story"), 
    url(r'^$', 'object_list', info_dict, name="cms-home"), 
) 
Смежные вопросы