1

我在 Django 上有一个网站。我想在每个页面上创建一个搜索输入。在一些“base.html”中,我为此搜索输入编写了新内容。

在views.py中我添加了一些类似的东西:

def main(request):
    if request.method == 'POST':
        search_string = request.POST['search_string']
        result = search(search_string)
        return direct_to_template(request, 'found_page.html', {'result': result})`

但我希望它在每一页上。

因此,我创建了新函数“search_function(request)”并将其添加到 views.py 中的每个 def 中。或者我可以创建一个装饰器并在views.py 中的每个def 之前编写它。

我不想每次添加新的def时都这样做。但我不知道怎么做。需要你的帮助

4

2 回答 2

3

所以这就是我认为你想要做的:在每个页面上显示一个搜索输入表单(无论哪个适用),并且只使用一个视图来处理搜索。

  1. 创建一个处理搜索的视图
  2. 创建一个 html 页面,其中包含<form>搜索元素,其操作将转到您在上一步中完成的视图
  3. 在您的 base.html 中包含或扩展它

我不明白的是,您是否需要搜索恰好是本地页面上的搜索?(例如,在本论坛内搜索)

要获取查询,您可以通过或类似方式提供request.GET['q']查询request.POST['q']

def search(request):
  if 'q' in request.GET and request.GET['q']:
     // do something

除非您的搜索(查询)更改了数据库中查询结果的状态,否则您不想使用POST. 改为使用GET

于 2012-04-13T21:26:35.760 回答
0

将表单的操作设置为转到不同的搜索视图,并让该功能负责搜索处理。您可以有一个专门的搜索页面,并执行完全相同的操作来检查表单是“POST”还是“GET”。“POST”是已经从任何其他先前页面完成的搜索。

于 2012-04-13T21:20:59.303 回答