Очевидно, что у вас должна быть модель для хранения результатов поиска и форма для ввода пользовательского ввода (строка поиска).
Это создаст таблицу базы данных, которая будет содержать сохраненные условия поиска и связывать условия поиска с конкретным пользователем.
models.py
class Search(models.Model):
user = models.ForeignKey(User)
search = models.CharField(max_length=255)
Проще всего создать форму модели, в которой будет поле ввода, в которое пользователь может записать свой поисковый запрос, а также проверяет опубликованные данные, поскольку все вводимые пользователем данные должны быть проверены:
forms.py
class SearchForm(forms.ModelForm):
class Meta:
model = Search
Когда вы публикуете данные формы с помощью вызова AJAX из формы в представлении сохранения, данные публикации будут проверены, экземпляр с поисковым термином будет сохранен в базе данных после того, как вы выполните поиск данных.
Все, что осталось сделать, - это отправить все данные в контексте, заданные вам шаблоном, и отобразить его.
После визуализации вы создаете словарь с данными, выводите его в JSON и возвращаете его с простым HttpResponse с определенным типом mime mimetype="application/json"
.
.
views.py
def save(request):
if request.method == 'POST':
form = SearchForm(request.POST):
if form.is_valid():
# Do some search with forms.cleaned_data['search'] and save it to result
result = #SomeSearchCode...
instance = form.save()
html = render_to_string('ajax_template.html', {'search':instance, 'result':result}, RequestContext(request))
if request.is_ajax():
response = {'result':"Success", 'html':html}
return HttpResponse(json.dumps(response), mimetype="application/json")
retrun render_to_response('full_template.html', {'html':html }, RequestContext(request)
Шаблоны
Что касается шаблонов, full_template.html
- это тот, который показывает форму поиска и включает ajax_template.html
для отображения результатов, поэтому мы можем легко добавить это с помощью JavaScript. Таким образом, все работает даже без JavaScript.
JQuery
AJAX-вызов также прямой. Вы собираете данные из формы и отправляете их с data
в представление, которое получит их как request.POST
. success
- это то, что обрабатывает данные, которые вы возвращаете из представления сохранения. В этом примере он добавляет html, визуализированный в представлении, к некоторому случайному div.
var dataString = 'search='+ $("search-field").val();;
$(function() {
$("#search-form").live("click", function() {
$.ajax({
type: "POST",
url: $("#search-form").attr("action"),
data: dataString,
dataType: "json",
success: function(data, textStatus, XMLHttpRequest) {
jQuery(data["html"]).appendTo(".some-div");
}
});
return false;
});
});
Это не проверено, но я надеюсь, что это пролило некоторый свет на процесс.