2012-05-24 79 views
0

Django有問題。Django GET方法。在分配之前引用的局部變量

我的錯誤信息:

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) 

如何解決呢?

回答

1

如果c的計算結果爲false,則應該給出adv_city的默認值。例如,空單可以在你的情況下工作:

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

如果你不這樣做,c是假的(Python的對待空字符串爲假,因爲你可能知道),那麼adv_city變量將不被視爲分配。

如果可以有一個有效的Advert一個空字符串作爲city屬性,則只是刪除if並讓的c任何值的過濾器運行。

+0

現在我有錯誤: render_to_string()最多需要3個參數(給出5個參數)http://dpaste.com/751737/ – pagepydj

+0

@pagepydj這與前面的問題無關。查看['render_to_response']的文檔(https://docs.djangoproject.com/en/dev/topics/http/shortcuts/#render-to-response),可能你的意思是:'return render_to_response('advert_by_city ',{'adverts':廣告,'adv_city':adv_city},context_instance = RequestContext(request))''。 (如果你還想將'c'對象傳遞給模板,很好,但是將其作爲字典中的另一個字段,而不是作爲單獨的參數) – mgibsonbr

1

應登錄的c的價值,我覺得你的代碼,它沒有達到if裏面的代碼,如果你給它在request.GET.get('city','')默認情況下,空字符串不會去iside的if

相關問題