Простая форма поиска Django просто не будет работать - PullRequest
0 голосов
/ 30 декабря 2010

Я просто не понимаю, что здесь происходит, и я потратил много времени, пытаясь отладить эту вещь (которую я взял прямо из книги 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())

Ответы [ 2 ]

2 голосов
/ 11 августа 2011

В этом и заключается проблема 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"),
) 
1 голос
/ 01 апреля 2011
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})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...