【问题标题】:Error when saving variables in Django template context在 Django 模板上下文中保存变量时出错
【发布时间】:2016-03-28 04:32:06
【问题描述】:

我创建了一个网页,该网页向 API 提交请求,该 API 根据用户在表单中提供的参数返回有关音乐会巡演信息的 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)

为什么会导致这种方法出现问题?如果这不是将解析后的数据从响应传递到模板的正确方法,那么我应该怎么做呢?

【问题讨论】:

    标签: python json django django-templates


    【解决方案1】:

    context = { 所在行的缩进级别是多少?

    正如发布的那样,这是一个语法错误。我想虽然它缩进到与if 语句相同的级别。

    form_artistSelect 仅在 form.is_valid()True 时分配,因此,如果表单无效有效,则在构建 context 字典时未定义 form_artistSelect。这将导致您看到的异常。

    您需要找出表单无效的原因,或者将所有代码移动到 if form.is_valid(): 块中并添加 else 以呈现并返回错误(或任何适合您的应用程序)。

    【讨论】:

      猜你喜欢
      • 2013-06-07
      • 2019-04-08
      • 2017-01-29
      • 2013-09-18
      • 2023-03-25
      • 1970-01-01
      • 2014-01-15
      • 2016-12-25
      • 2019-01-17
      相关资源
      最近更新 更多