一旦在模板中单击按钮,如何运行Django视图功能

时间:2015-12-22 23:41:19

标签: javascript jquery python ajax django

我已经制作了一个网页,根据用户在POST请求中通过api提交的参数,显示Concert数据查询的结果。 Web应用程序的用户需要能够将音乐会添加到他们的音乐会列表中,或者将邀请发送给其他用户进行音乐会。这将需要将每个音乐会的信息发送回服务器,在服务器中可以将其存储在用户的模型中。

在结果列表的每个列表元素中,我有两个按钮,单击时会使用ajax调用向服务器发送带有Concert信息的POST请求。目前我只有这两个函数的shell,因为我不清楚如何为当前列表项发送数据,然后在视图中启动相应的函数。以下是我目前为客户提供的服务:

var venues = {{venues|safe}};
var dates = {{raw_dts|safe}};
var ticket_statuses = {{ticket_statuses|safe}};
var ticket_urls = {{ticket_urls|safe}};
console.log("length of artist list" + venues.length);
var $list = $("<ul  class='list-group'>");
for(var i = 0; i < venues.length; i++){

    $list.append("<li class='list-group-item'>Artist: {{form_artistSelect}}  Location: " + venues[i].city + ', ' + venues[i].region +' Venue: ' + venues[i].name + 
       "Date: " + dates[i] + "tickets status: " + ticket_statuses[i] + "<br><a href = '" + ticket_urls[i] +"'" + "> ticket link</a> " + "<button id ='invite'type='button' class='btn btn-primary-outline'>Invite a friend</button>  <button id = 'save' type='button' class='btn btn-primary-outline'> Save concert</button> </li>"); 
}
// var $resultObj = $('<div id = "inviteObj" style="margin:100px"></div>');
// $resultObj.append($divline);
$list.appendTo($("#container"));
$("#save").click(function() {
    $.ajax({
        url: your_url,
        method: 'POST',
        data: {
            name: value,
            click: True
        }
        success:function(data){
        }
    });
});

$("#invite").click(function() {
    $.ajax({
        url: your_url,
        method: 'POST',
        data: {
            name: value,
            click: True
        }
        success:function(data){

        }
    });
});  

在views.py中我有一个视图函数,它处理获取JSON响应并根据它从表单请求获得的用户输入将其传递到客户端。以下是观点:

def search(request):
    form = SearchForm(request.POST or None)
    if form.is_valid():
        form_artistSelect = urllib2.quote(form.cleaned_data.get("artist_select"))
        form_city =   urllib2.quote(form.cleaned_data.get("city"))
        form_state = urllib2.quote(form.cleaned_data.get("state"))
        mile_radius = urllib2.quote(form.cleaned_data.get("radius"))
        #print "testing"
        url = "http://api.bandsintown.com/events/search?artists[]=" + form_artistSelect + "&location=" +form_city+","+ form_state+"&radius="+ mile_radius + "&format=json&app_id=YOUR_APP_ID"
        data = json.load(urllib2.urlopen(url))

        #titles = [ i.get("title") for i in data]
        raw_dts = json.dumps([i.get("datetime") for i in data])

        #formatted_dts = [i.get("formatted_datetime") for i in data]
        ticket_urls = json.dumps([i.get("ticket_url").encode("utf-8") for i in data])
        ticket_statuses = json.dumps([i.get("ticket_status").encode("utf-8") for i in data])
        venues = json.dumps([i["venue"] for i in data])
    context = {
            "form" : form,
            "form_artistSelect" : form_artistSelect,
            "raw_dts" : raw_dts,
            "ticket_urls" : ticket_urls,
            "ticket_statuses" : ticket_statuses,
            "venues" : venues,
        }
    else:
        context = {
            "form" : form   

        }
    return render(request,"searchform.html" , context)

具体来说,我有几个问题

由于此视图是我对该页面唯一的视图,我应该为每个按钮点击事件添加其他视图功能吗?另外,将每个音乐会列表项的数据发送到服务器端的python的正确方法是可以为每个用户保存吗?

1 个答案:

答案 0 :(得分:1)

我会添加两个视图

  • invite_concert
  • save_concert

每次点击,您都会使用该视图的正确网址,如果您不需要任何回复,该视图可以返回空的HttpResponse。 对于参数,我喜欢有时将所需的参数添加到项目的HTML中,例如

data-concert-id=venues[i].id

但也许您已经在列表项中包含了所有必需的数据。无论如何,您可以检索它们并在ajax调用的数据对象中轻松使用它们,例如:

{concert-id : $(this).attr('data-concert-id')