Django 1.9中的自定义搜索查询; GET请求

时间:2016-04-05 21:59:48

标签: python django sqlite querying

我一直在尝试为博客项目实现搜索功能,现在各种教程中的几个不同的实现始终都是404,无论输入如何,我都在寻找对于答案,这里。

这是对我来说最简陋的那个,当然是views.py

def search(request):
    try:
        q = request.GET['q']
        posts = Post.objects.filter(title__search=q)
        return render_to_response('blog/search_post_list.html', {'object_list': posts, 'q':q})
    except KeyError:
        return render_to_response('blog/search_post_list.html')

blog/urls.py中:     网址(r' ^搜索',搜索,名称='搜索'),

/templates/blog/search_post_list.html处有一个模板,其中包含一些包含{% for post in object_list %}的代码,与工作模板相同。

因此,转到任何localhost:8000/blog/search?q=<search_query_here>是一个带有404的Django调试页面。

我保持代码简单简单的原因是因为我觉得可能存在代码之外的东西,我希望有人可以告诉我在哪里查看代码。

编辑: 这是404页面:

Page not found (404)
Request Method: GET
Request URL:    http://localhost:8000/blog/search?q=what
Raised by:  django.views.generic.detail.DetailView
No post found matching the query
You're seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.

这里是我的DetailView的URL,因为它显然被称为。

url(r'^(?P<slug>[a-zA-Z0-9-]+)/?$',
    DetailView.as_view(
    model=Post,
    )),

2 个答案:

答案 0 :(得分:1)

您的详细信息视图而不是搜索视图正在处理网址/blog/search/。然后您获得404,因为没有slug=search的帖子。

您可以通过在详细模式上方移动搜索网址模式来解决此问题。

答案 1 :(得分:0)

尝试以这种方式添加url-pattern:

DECLARE @YEAR INT
SET @YEAR = (SELECT YEAR(GETDATE()))
DECLARE @MONTH INT
SET @MONTH = (SELECT MONTH(GETDATE()))

DECLARE @DT TABLE(ID INT, MONTHNAME NVARCHAR(20))

INSERT INTO @DT SELECT NUMBER AS ID,
   DATENAME(MONTH, CAST(@YEAR*100+NUMBER AS VARCHAR) + '01')  AS MONTHNAME
FROM MASTER.DBO.SPT_VALUES   
WHERE TYPE = 'P' AND  
  NUMBER BETWEEN @MONTH AND 12

INSERT INTO @DT SELECT NUMBER AS ID,
   DATENAME(MONTH, CAST(@YEAR*100+NUMBER AS VARCHAR) + '01')  AS MONTHNAME

FROM MASTER.DBO.SPT_VALUES   
WHERE TYPE = 'P' AND  
  NUMBER BETWEEN 1 AND @MONTH -1

SELECT * FROM @DT 

(或'blog / search /') 使用GET请求参数将添加如*** / search /?parameter_name1 = value1&amp; parameter_name2 = value2