2012-04-13 2 views
1

У меня есть сайт на Django. Я хочу создать вход для поиска на каждой странице. В некотором «base.html» я пишу новое для этого ввода.Искать входные данные на каждой странице. Django

В 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)» и добавлю ее в EVERY def в views.py. Или я могу создать декоратор и написать его перед КАЖДОЙ def в views.py.

Я не хочу это делать КАЖДЫЙ раз добавляю новый def. Но я не знаю как. Нужна ваша помощь

+0

Возможно, вы можете работать в своей проблеме с помощью [промежуточного программного обеспечения] (https://docs.djangoproject.com/en/dev/topics/http/middleware/?from=olddocs) – danihp

ответ

2

Так вот что я думаю, что вы хотите сделать: отобразить форму ввода поиска на каждой странице (в зависимости от того, что применимо) и использовать только одно представление для обработки поиска.

  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.

+0

Спасибо. «действие» в

. Я совсем забыл об этом. – imkost

+0

@ user1185123 Нет проблем. Используйте 'GET' вместо' POST'. При запросе (поиске) тратить время на создание нового ресурса. Надеюсь это поможет! – CppLearner

+0

ресурсов? я не понимаю, почему get лучше, чем сообщение в этом случае. – imkost

0

Установите действие формы, чтобы перейти к другому поисковому запросу, и пусть одна из функций позаботится о обработке поиска. Вы можете иметь специальную страницу поиска и делать то же самое для проверки, является ли форма «POST» или «GET». «POST» - это поиск, уже выполненный с любой другой предыдущей страницы.

Смежные вопросы