我目前在views.py文件中有一个搜索功能,如下所示:
def json_search(request):
query = request.GET.get('query')
api_key = locu_api
url = 'https://api.locu.com/v1_0/venue/search/?api_key=' + api_key
locality = query.replace(' ', '%20')
category =
final_url = url + "&locality=" + locality + "&category=" + category
json_obj = urllib2.urlopen(final_url)
decoded_data = json.load(json_obj)
return render(request, 'loc_search.html',
{'objects': decoded_data['objects']})
我设置的是一个下拉搜索栏,我希望我的json_search()函数中的类别变量在使用提交按钮提交表单之前自动分配到下拉栏上的选定选项。搜索栏如下所示:
这样的代码:
<form action="{% url 'search' %}">
<div class="input-group">
<input name="query" input id="address" type="textbox" placeholder="City or Zipcode" class="form-control datebox">
<div class="input-group-btn">
<button class="btn btn-default" type="submit" id="addressSearch">Search</button>
<button name = "category_query" tabindex="-3" data-toggle="dropdown" class="btn btn-default dropdown-toggle" type="button">
<span class="caret"></span>
<span class="sr-only">Toggle Dropdown</span>
</button>
<ul class="dropdown-menu" >
<li><a href="restaurants">Resturant</a></li>
<li><a href="active">Activities</a></li>
<li><a href="bars">Bar / Club</a></li>
<li class="divider"></li>
<li><a href="other">other</a></li>
</ul>
</div>
</div>
</form>
这甚至可能吗?
答案 0 :(得分:1)
您必须以某种方式将值返回到后端 view 代码才能实现。
在提交表格之前可以这样做。例如,您可以在模板代码中使用 Ajax 调用来访问由json_search
函数提供服务的相同 URL ,并在category
中传递request.GET
URL,然后将其从click
中拉出来。
如果您希望在下拉列表选择时分配它,您可能希望通过 jQuery 将json_search
事件处理程序附加到该下拉列表,然后在该处理程序的函数,获取所选值,然后将其添加到 Ajax 回调到json_search
函数。
在您的POST
代码中,您需要区分处理提交(应该是GET
)与一般done
处理(可能基于是否存在各种参数)在网址)。
根据OP的评论进行编辑:
这肯定不是微不足道的,特别是如果你之前没有使用 Ajax ,但它总体上不应该太糟糕(一旦你掌握了它,这个范例就可以使用了与其他模块(如 Datatables 等)进行各种交互,更不用说你自己的 Django 后端了。
虽然有很多不同的方法可以做到这一点,但我很喜欢将 jQuery 的when
与when
结合使用(在相同的示例中使用)页)。 done
允许您触发多个异步 Ajax 请求, override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let indexpath = tableView.indexPathForSelectedRow() as NSIndexPath! //supposed to get the correct index, but doesn't
let cell = tableView.cellForRowAtIndexPath(indexpath) as UITableViewCell!
captureCellVals.setObject(cell.textLabel?.text, forKey: "restoname")
//code to transfer to final view:
let view2 = self.storyboard?.instantiateViewControllerWithIdentifier("finalView") as FinalView
self.navigationController?.pushViewController(view2, animated: true)
}
充当连接点,等待它们完成后再继续。
答案 1 :(得分:1)
是的,这是可能的,您可以使下拉列表中的所有链接都有一个onclick
处理程序,需要保存该类别。然后,您将使用url
函数代替表单的submit
,该函数将发送您的表单数据+ category
。
使用angular
+ ui.bootstrap
可以很容易地做到这一点。
http://plnkr.co/edit/iBY2n9dq8Tn95IUGwNAB?p=preview
您需要将链接转换为不具有有效href
而是调用函数,例如:
<a href="#" onclick="setCategory('restaurant')">Restaurant</a>
并为类别添加隐藏字段
<input name="category" input="" id="category" type="hidden" placeholder="Category" class="form-control" />
和一些简单的javascript
function setCategory(category) {
alert('category (hidden) = ' + category);
$('#category').val(category);
}