[英]Jquery drop down list in Django
我正在尝试在Django应用程序中学习使用Jquery。我的代码如下所示
views.py
from django.shortcuts import render
from django.http import HttpResponse
from airapp.models import Travel
def search_form(request):
return render(request, 'search_form.html')
def searchs(request):
if 'tr' in request.GET and request.GET['tr']:
q = request.GET['tr']
books = Travel.objects.filter(froms__icontains=q)
return render(request, 'search_results.html',
{'books': books, 'query': q})
else:
return HttpResponse('Please submit a search term.')
search_form.html
<html>
<head>
<title>Search</title>
</head>
<body>
<form id="travel-form">
TRAVEL<select name='tr'>
<option value='one' >ONE WAY</option>
<option value='two'>TWO WAY</option>
</select>
</form>
<div id='one' >
</div>
</body>
</html>
search_results.html
<p>You searched for: <strong>{{ query }}</strong></p>
{% if books %}
<p>Found {{ books|length }} book{{ books|pluralize }}.</p>
<ul>
{% for book in books %}
<li>{{ book.froms }}</li>
<li>{{ book.to}}</li>
<li>{{ book.classs }}</li>
<li>{{ book.details }}</li>
{% endfor %}
</ul>
{% else %}
<p>No books matched your search criteria.</p>
{% endif %}
urls.py
from django.conf.urls import patterns, include, url
from air import views
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^search-form/$', views.search_form),
url(r'^search/$', views.search),
)
当我从旅行下拉列表中选择一个选项“一个”或“两个”时,我想在创建表单的同一页面上显示搜索结果(search_form.html)。我可以使用jquery显示它吗? 谁能帮我写代码。
当我需要执行一些操作并且不想重新加载页面时,我使用对Ajax的JQuery调用,我在AJAX中进行了相关的操作,然后在JQuery函数中接收到AJAX响应,而没有离开或重新加载页面。 我将在此处为您提供一个简单的示例,以帮助您了解其基本知识:
jQuery函数,放在您需要的模板中(视情况而定)(search_form.html)
function search_results(){
//You have to get in this code the values you need to work with, for example:
var search_type = document.getElementsByName("tr")[0].value //Get the value of the selected option ONE/TWO
$.ajax({ //Call ajax function sending the option loaded
url: "/search_ajax_function/", //This is the url of the ajax view where you make the search
type: 'POST',
data: "search_type="+search_type,
success: function(response) {
result = JSON.parse(response); // Get the results sended from ajax to here
if (result.error) { // If the function fails
// Error
alert(result.error_text);
} else { // Success
for(var i=0;i < result.item_list.length;i++){
//Here do whatever you need with the results, like appending to a result div
$('#result_div').append(result.item_list[i]);
}
}
}
});
}
您必须意识到,在不知道要获得什么样的结果或如何显示它们的情况下,我无法完成代码,因此您需要根据需要修改此代码。
JQuery调用的AJAX函数
请记住,您需要在urls.py中为此Ajax函数添加一个URL,例如: url(r'^/search_ajax_function/?$', 'your_project.ajax.search_ajax', name='search_ajax'),
然后是您的AJAX函数,就像普通的Django View,但是将此函数从django.core.context_processors从django.views.decorators.csrf导入ajax.py,从django.utils导入csrf_exempt,从django.utils导入csrf_exempt导入simplejson
@csrf_exempt
def search_ajax(request):
response = []
if "search_type" in request.GET:
search_type = request.GET['search_type']
else:
return HttpResponse(simplejson.dumps(response))
#Now you have here Search_type and you can do something like
books = Travel.objects.filter(froms__icontains=q)
for item in books:
response.append({'id': item.id, 'name': item.name}) # or whatever info you need
return HttpResponse(simplejson.dumps(response))
因此,在不离开页面的情况下,您会通过javascript收到包含您要查找的查询的书籍清单。 因此,在第一个函数javascript中,当您收到来自AJAX的响应时,您将得到一个类似以下的列表:
[{'id':1, 'name':'book1'},{'id':2, 'name':'book2'},{'id':3, 'name':'book3'}]
因此,您可以有一个<div id="result_div style="display:none"></div>
,当您收到列表时,您可以使div可见并将结果附加所需的格式或数据
我知道这在开始时可能会令人困惑,但是一旦您习惯了AJAX,就可以轻松进行这种操作而无需离开或重新加载页面。
理解的基础如下:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.