gpt4 book ai didi

python - 查询字符串比较在 Django View 中失败。为什么?

转载 作者:太空宇宙 更新时间:2023-11-04 00:18:15 25 4
gpt4 key购买 nike

我有一个过滤系统,让用户可以通过一些存储在模型字段中的参数过滤出他们玩过的游戏。我将过滤器作为查询字符串从我的模板中传递,如下所示:

<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部分。我试过:

  1. 通过执行 str(objects_filter)objects_filter 转换为字符串
  2. 使用 objects_filter.encode('utf8')
  3. 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(...) 调用。幸运的是,它们都不是必需的。

关于python - 查询字符串比较在 Django View 中失败。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50123681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com