2012-05-24 4 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

Вы должны указать значение по умолчанию для adv_city в случае, если c оценивает значение false. Например, пустой список может работать в вашем случае:

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 ': adverts,' adv_city ': adv_city}, context_instance = RequestContext (запрос)) '. (Если вы хотите также передать объект 'c' в шаблон, отлично, но сделайте это как другое поле в словаре, а не как отдельный аргумент) – mgibsonbr

1

Вы должны войти значение c, я думаю, что ваш код это не достигающий кода внутри if, если вы даете ему по умолчанию в request.GET.get('city',''), пустая строка не пойдет Iside на if

Смежные вопросы