2015-05-01 2 views
0

При попытке загрузить страницу я получаю следующее сообщение: local variable 'like' referenced before assignment. В моем контексте он возвращается к "like": like,.Локальная переменная 'like', на которую ссылаются перед присвоением

Может кто-нибудь, пожалуйста, помогите мне исправить это?

Спасибо!

views.py:

def photo_detail(request, photo_slug): 
    photos = Photo.objects.filter(slug=photo_slug) 
    obj = get_object_or_404(Photo, slug=photo_slug) 
    all_comments = obj.comment_set.all() 
    truncate_amount = 3 
    display_comments = obj.comment_set.all()[:int(truncate_amount)] 
    for c in all_comments: 
     c.get_children() 
    comment_form = CommentForm() 

    try: 
     like = Like.objects.get(pk=obj.id) 
    except Like.DoesNotExist: 
    pass 

    context = { 
     "all_comments": all_comments, 
     "comment_form": comment_form, 
     "display_comments": display_comments, 
     "like": like, 
     "obj": obj, 
     "photos": photos, 
     "truncate_amount": truncate_amount 
    } 
    return render(request, "photos/photo_detail.html", context) 
+0

Вы должны удалить строки 'фотографии = Photo.objects.filter (пробковый = photo_slug)' как вы не используете 'photos' после этого. Чего вы пытаетесь достичь с помощью 'like = Like.objects.get (pk = obj.id)'? 'obj.id' является идентификатором объекта' Photo', вы не можете использовать его для извлечения объекта 'Like'. Я предполагаю, что вы пытаетесь сделать что-то вроде 'Like.objects.get (photo = obj)', возможно, разместите свои модели, чтобы мы могли помочь вам больше. – aumo

+0

Спасибо @aumo за ваш ввод! Я изменил строку на 'Like.objects.get (photo = obj)'. Я сохранил 'photos = Photo.objects.filter (slug = photo_slug)', потому что я использую его позже в своем html-шаблоне для отображения изображений. – jape

+0

Не '' фото_slug' уникальное поле? Если это так, все, что 'photos' будет когда-либо содержать, это список, содержащий один элемент, который является' obj'. – aumo

ответ

1

Если вы получаете Like.DoesNotExist исключение, вы просто pass, не назначая ничего like. Но тогда вы все равно пытаетесь его использовать. Следовательно, ошибка, сообщающая вам, что вы пытались использовать ее, прежде чем назначать ей что-либо.

Если вы хотите назначить какое-то «запасное» значение, как None, вы можете сделать это в явном виде:

try: 
    like = Like.objects.get(pk=obj.id) 
except Like.DoesNotExist: 
    like = None 
+0

Спасибо! Он работает сейчас. – jape

+0

@jape Это не сработает, но ваш код по-прежнему не прав, переменная 'like' никогда не будет содержать правильное значение, см. Мой комментарий к вашему вопросу для информации. – aumo