【发布时间】:2016-03-30 16:52:00
【问题描述】:
我正在实现一个 Django 应用程序的功能,在该应用程序中,我有一个表单,该表单可以提交用户的输入并进行 api 调用,该调用返回我解析并显示在页面上的 JSON 响应。查询结果显示在我通过遍历每个对象创建的列表中。在每个列表元素中,我都有一个按钮,单击该按钮会打开一个模式表单。此表单包含电子邮件收件人、全名和用户可以在单击提交和发送电子邮件之前指定的消息的字段。提交表单后,我需要在此表单中附加一些额外数据,以便将其发送到服务器端并添加到电子邮件中。
我看过像this 这样的帖子,似乎在做类似的事情;但是,问题在于 jquery 中的事件处理程序需要知道它需要从哪个列表元素中获取数据,这意味着它必须知道循环的当前迭代才能获取正确的信息。
我应该如何实现这个?
这是根据从服务器端返回的数据制作列表的代码:
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> "+
"{% if user.is_authenticated %}"+
"<button id ='invite'type='button' class='btn btn-info btn-lg' data-toggle='modal' data-target='#myModal' venue= " +venues[i] +" date = "+ dates[i] +
"ticket_url = "+ticket_urls[i]+" artist = {{form_artistSelect}} >Invite a friend</button> <button id = 'save' type='button' class='btn btn-" +
"primary-outline'> Save concert</button> "+
"{% endif %}"+
"</li>");
}
这是附加数据的 jquery 函数的外壳:
$list.appendTo($("#container"));
$("#mform").submit(function()){
$('<input />').attr('type','hidden')
.attr('')
}
编辑:
如果不清楚,我特别需要将用户在模态表单中输入的数据与ticket_urls、venues、dates 的值捆绑在一起,放在每个数组对应的位置到按钮在列表中的位置。这些数组中的每一个都具有与在服务器端解析 JSON 时相同的数据顺序。对于日期数组,您有这个结构var dates = ["2016-03-18T12:00:00", "2016-03-19T12:00:00", "2016-03-20T12:00:00"],其中第一个日期显示在第一个列表元素中,第二个日期显示在第二个列表元素中,依此类推。例如,如果单击第二个列表元素中的按钮,我需要将表单数据与每个数组第二个位置的每个值一起发送。
我正在考虑以某种方式在原始循环中执行此操作,但我认为这是不可能的。我该怎么做呢?
从views.py查看
def search(request):
queryform = SearchForm(request.POST or None)
modalform = ModalForm(request.POST or None)
#print "query form is valid = " + str(modalform.is_valid())
if queryform.is_valid():
form_artistSelect = urllib2.quote(queryform.cleaned_data.get("artist_select"))
form_city = urllib2.quote(queryform.cleaned_data.get("city"))
form_state = urllib2.quote(queryform.cleaned_data.get("state"))
mile_radius = urllib2.quote(queryform.cleaned_data.get("radius"))
#print "testing"
url = "http://api.bandsintown.com/artists/" + form_artistSelect + "/events/search.json?api_version=2.0&app_id=YOUR_APP_ID&location=" +form_city+","+ form_state+"&radius="+ mile_radius
data = json.load(urllib2.urlopen(url))
#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"
context = {
"queryform" : queryform,
"modalform" : modalform,
"data": data
}
else:
context = {
"queryform" : queryform
}
if modalform.is_valid():
form_recipient = modalform.cleaned_data.get("rec_email")
form_message = modalform.cleaned_data.get("message")
form_recname = modalform.cleaned_data.get("rec_name")
print form_recipient
print form_message
print form_recname
concert_venue = modalform.cleaned_data.get("additionalValues[venue]")
concert_date= modalform.cleaned_data.get("additionalValues[uf_date]")
concert_url = modalform.cleaned_data.get("additionalValues[ticket_url]")
artist = modalform.cleaned_data.get("additionalValues[artist]")
print "concert venue"
print concert_venue
print "concert date"
print concert_date
print "concert_url"
print concert_url
print "artist"
print artist
return render(request,"searchform.html" , context)
将存储邀请的模型
class Invite(models.Model):
sender = models.ForeignKey(User, related_name= "invite_sender", on_delete = models.CASCADE)
#recipient = models.ForeignKey(User, related_name= "invite_recipient", on_delete = models.CASCADE)
recipient = models.EmailField()
concert = models.ForeignKey(Concert, on_delete = models.CASCADE)
artist = models.ForeignKey(Artist, on_delete = models.CASCADE)
message = models.CharField(max_length = 120, blank = True, null = True)
date_sent = models.DateTimeField(auto_now_add = True, auto_now = False)
forms.py 中的相关表单
class SearchForm(forms.Form):
artist_select = forms.CharField()
city = forms.CharField()
state = forms.CharField()
radius = forms.CharField()
class ModalForm(forms.Form):
rec_email = forms.CharField()
message = forms.CharField()
rec_name = forms.CharField()
模板中的 Ajax 调用
$("#mform").submit(function(){
var c = getCookie('csrftoken');
//var data1 = $().attr("");
var extraData = [];
extraData['venue'] = $("invite").attr("venue");
extraData['artist'] = $("invite").attr("artist");
extraData['f_date'] = $("invite").attr("formatted_date");
extraData['uf_date'] = $("invite").attr("date");
extraData['ticket_url'] = $("invite").attr("ticket_url");
extraData['city'] = $("invite").attr("city");
extraData['region'] = $("invite").attr("region");
extraData['artist'] = $("invite").attr("artist");
$ajax({
context:this,
type : 'POST',
dataType: 'json',
url: '/artistsearch/',
data: {
csrfmiddlewaretoken: c,
//data_form: data1,
additionalValues: extraData
},
success: function(response){}
});
});
【问题讨论】:
-
不清楚你在问什么。当您可以简单地使用 django
include标签或从后端发送模板时,为什么还要附加这样的块 html? -
对不起,我的意思是除了点击提交按钮时将发送到服务器的表单字段之外,我还想发送每个数组中的当前元素为@ 987654333@、
ticket_statuses[i]和ticket_urls[i]在 for 循环中迭代。另外,从后端发送模板是什么意思?这对我有帮助吗? -
@DhiaTN 我刚刚更新了帖子,对问题进行了更直接的解释?
-
使用对 Python 的 Ajax 请求作为每个列表项的 on submit
标签: javascript jquery python django forms