我已经创建了一个网页,该网页向api提交请求,该api根据用户在表单中提供的参数返回有关Concert tour的信息的JSON对象。我能够成功获取JSON并解析它。数据的结构是一组Concert对象,其中包含有关场地,日期,位置等的信息,我将解析每个对象并将其保存到列表(正在工作)。然后,我需要能够在与视图对应的模板中将这些显示为列表(格式如同它们是Stubhub或Ticketmaster上的音乐会)。
为了做到这一点,我想我可以将每个列表作为变量存储在模板的上下文字典中,就像我用文字字符串一样。出于某种原因,当我尝试这个时,我得到Exception Value: local variable 'form_artistSelect' referenced before assignment
以获得以下代码:
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 = [str(i.get("datetime")) for i in data]
#formatted_dts = [i.get("formatted_datetime") for i in data]
ticket_urls = [str(i.get("ticket_url")) for i in data]
ticket_statuses = [str(i.get("ticket_status")) for i in data]
venue_names = [str(i.get("venue").get("name")) for i in data]
venue_cities = [str(i.get("venue").get("city")) for i in data]
venue_region = [str(i.get("venue").get("region")) for i in data]
context = {
"form_artistSelect" : form_artistSelect,
"raw_dts" : raw_dts,
"ticket_urls" : ticket_urls,
"ticket_statuses" : ticket_statuses,
"venue_names" : venue_names,
"venue_cities" : venue_cities,
"venue_region" : venue_region,
"form" : form
}
return render(request,"searchform.html" , context)
为什么会出现这种方法的问题?如果这不是将解析数据从响应传递到模板的正确方法,那么我该怎么做呢?
答案 0 :(得分:3)
第{<1}}行的缩进级别是什么?
发布时这是语法错误。我想虽然它缩进到与context = {
语句相同的级别。
if
为form_artistSelect
时才会分配 form.is_valid()
,因此,如果表单不有效,则True
在构建时未定义form_artistSelect
context
字典。这将导致您看到的异常。
您需要弄清楚表单无效的原因,或者将所有代码移到if form.is_valid():
块中并添加else
以呈现并返回错误(或适合您的应用程序的任何内容) )。