2015-12-22 65 views
0

我製作了一個網頁,向api提交請求,該API根據用戶在窗體中提供的參數返回關於Concert之旅信息的JSON對象。我能夠成功獲取JSON並解析它。數據的結構是一組Concert對象,其中包含有關場地,日期,地點等信息,我將其解析並保存到列表(正在工作)中。然後,我需要能夠在視圖對應的模板中將這些列表顯示爲列表(格式化爲Stubhub或Ticketmaster中的音樂會)。在Django模板上下文中保存變量時出錯

爲此,我想我可以將每個列表作爲變量存儲在模板的上下文字典中,因爲我已經使用字面字符串進行了操作。出於某種原因,當我嘗試這個我得到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) 

爲什麼會造成這種方法有問題?如果這不是將解析數據從響應傳遞到模板的正確方法,那麼我應該如何去做呢?

回答

3

在什麼級別的縮進是context = {在?

由於發佈這是一個語法錯誤。我想盡管它縮進到與if聲明相同的水平。

form_artistSelect分配只有form.is_valid()True所以,如果表單有效,form_artistSelect是不確定的,當你建立context字典。這會導致你看到的異常。

你需要弄清楚爲什麼形式是無效的,或者所有的代碼移動到if form.is_valid():塊,並添加一個else渲染並返回一個錯誤(或其他適合您的應用程序)。