【问题标题】:Django/Python: Pulling value from template into views.pyDjango/Python:将值从模板拉入views.py
【发布时间】:2015-07-02 11:12:05
【问题描述】:

我的 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>

这可能吗?

【问题讨论】:

    标签: python json django api


    【解决方案1】:

    是的,这是可能的,您可以让下拉列表中的所有链接都有一个需要保存类别的onclick 处理程序。然后,您可以使用submit 函数代替url 来发送表单数据+ category

    angular + ui.bootstrap 很容易做到这一点。


    使用 jQuery

    ​​>

    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);
    }
    

    【讨论】:

    • 是否可以将 angular 和 ui bootstrap 实现到我目前拥有的东西中?
    • 所以我刚刚通读了文档,基本上我主要看的是允许客户端从 django 视图调用方法?或者我是否需要实施一些基本的 crud 操作是好的。抱歉打扰
    【解决方案2】:

    您必须以某种方式将值返回到后端 view 代码才能实现。

    可以在提交表单之前这样做。例如,您可以在模板代码中使用 Ajax 调用来访问 json_search 函数所服务的相同 URL,在 URL 中传递 category,然后将其从request.GET 中拉出来。

    如果您希望在下拉选择时分配它,您可能希望通过 jQueryclick 事件处理程序 附加到该下拉列表,然后在该处理程序的函数,获取选定的值,然后将其添加到 Ajax 回调到您的 json_search 函数。

    在您的json_search 代码中,您需要区分处理提交(应该是POST)和一般的GET 处理(可能基于URL 中是否存在各种参数)。

    根据 OP 的评论进行编辑:

    这当然不是微不足道的,尤其是如果您以前没有使用过 Ajax,但总体上应该不会太糟糕(一旦您掌握了窍门,就可以使用这种范例用于与其他模块(如 Datatables 和许多其他模块的各种交互,更不用说您自己的 Django 后端)。

    虽然有很多不同的方法可以做到这一点,但我喜欢将 jQuerywhendone 结合使用(在同一页的示例中使用)。 when 允许您触发多个异步 Ajax 请求,done 充当连接点,您可以在此等待它们完成后再继续。

    【讨论】:

    • 听起来工作量很大,我对 Ajax 的经验很少 :/ 猜那是我的夜晚了 :')
    猜你喜欢
    • 1970-01-01
    • 2012-04-07
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    相关资源
    最近更新 更多