У меня есть система фильтров, которая позволяет пользователям отфильтровывать игры, в которые они играли, по нескольким параметрам, которые хранятся в виде полей в моделях. Я передаю фильтр как строку запроса из моего шаблона следующим образом:
<li>
<a href = "{% url 'games_filter' %}?filter='my_active_games'&user = {{user.email}}">My Active Games</a>
</li>
И, на мой взгляд, я делаю следующее:
def games_filter(request):
objects_filter = str(request.GET.get('filter'))
user = User.objects.get(email=request.GET.get('user'))
if str(objects_filter) == 'my_active_games':
raise Exception('Line 56')
games = Game.objects.filter(Q(owner=user) & Q(status='New') or Q(status='Qualify'))
elif str(objects_filter) == 'all_active_games':
games = Game.objects.filter(Q(status = "New") | Q(status = "Qualify"))
elif objects_filter == 'my_played':
games = Game.objects.filter(Q(status = "Played") & Q(owner=user))
elif objects_filter == 'my_finished':
games = Game.objects.filter(Q(status = "Finished") & Q(owner=user))
elif objects_filter == 'my_deleted':
games = Game.objects.filter(Q(status = "Deleted") & Q(owner=user))
else:
games = Game.objects.all()
Но функция не входит в первое условие if
, переходит непосредственно к части else
. Я пытался:
objects_filter
в строку с помощью str(objects_filter)
objects_filter.encode('utf8')
request.GET.get('filter')
в строкуНи то, ни другое не помогло. Что я делаю неправильно?
В URL-адресе нет необходимости использовать одинарные кавычки. Просто должно быть:
<li>
<a href = "{% url 'games_filter' %}?filter=my_active_games&user = {{user.email}}">My Active Games</a>
</li>
Если вы добавили print(objects_filter)
и раньше не заметили проблемы, возможно, вы пропустили цитаты. В будущем попробуйте print(repr(my_string))
, и будет намного яснее, что что-то не так. Например:
>>> my_string = "'hello'"
>>> print(my_string)
'hello' # easy to miss
>>> print(repr(my_string))
"'hello'" # two sets of quotes!
С другой стороны, я предполагаю, что вы добавили вызовы str(...)
после того, как что-то не сработало. К счастью, ни один из них не нужен.
Без проблем! Я уверен, что был в том же месте раньше. Цитаты легко скользят по глазам.
Если ваш пользователь вошел в систему, то просто получите его с помощью request.user
. Кроме того, в первом блоке if, почему вы подняли исключение, а затем приступите к выполнению команды фильтра?
Я предполагаю, что @ Di437 добавил исключение в качестве меры отладки. Надежный способ проверить, входит ли ваша ветка :)
@Parousia Да, sushain97 прав, это была точка останова отладки.
Я понимаю. Я обычно использую операторы печати.
Черт побери, это сработало! Я уже довольно давно выдергиваю волосы! Спасибо! Я приму твой ответ, как только ТАК мне позволит!