我一直在尝试为博客项目实现搜索功能,现在各种教程中的几个不同的实现始终都是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,
)),
答案 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