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

时间:2012-05-24 05:42:30

标签: django

我有Django的问题。

我的错误讯息:

/ city / city的UnboundLocalError 分配前引用的局部变量'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)

如何解决?

2 个答案:

答案 0 :(得分:1)

如果adv_city评估为false,则应为c提供默认值。例如,一个空列表可能适用于您的情况:

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

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

如果您可以拥有一个空字符串作为Advert属性的有效city,那么只需删除if并让过滤器运行价值c

答案 1 :(得分:1)

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

旁边