Django GET 方法.赋值前引用的局部变量



我对Django有问题。

我的错误消息:

UnboundLocalError at/city/city赋值前引用的局部变量"adv_city"

回溯:http://dpaste.com/751727/

视图:

def advert_by_city(request):
    c = request.GET.get('city', '')
    if c:
        adv_city = Advert.objects.filter(city=c)
    adverts = Advert.objects.values('city').distinct()
    return render_to_response('advert_by_city', {'adverts':adverts},{'adv_city':adv_city}, context_instance=RequestContext(request))

模板:

{% for city in adverts %}
    <a href="city?{{ city.city }}"/>{{city.city}}</a>
<br/>
{% endfor %}
{% for adverts in adv_city%}
    {{adverts.title}}
{% endfor%}

型:

class Advert(models.Model):
    title = models.CharField(max_length=255)
    city = models.CharField(max_length=255)

如何解决?

您应该为adv_city提供一个默认值,以防c计算结果为 false。例如,空列表可能适用于您的情况:

c = request.GET.get('city', '')
adv_city = Advert.objects.filter(city=c) if c else []

如果你不这样做,并且c是假的(Python 将空字符串视为假,你可能知道),那么adv_city变量将不被视为已分配。

如果可以具有将空字符串作为 city 属性的有效Advert,则只需删除if并让过滤器针对 c 的任何值运行。

你应该

记录c的值,我认为你的代码没有到达if里面的代码,如果你在request.GET.get('city','')中给它一个默认值,空字符串不会去if

相关内容

最新更新