如何将上下文变量与 Django 模板中的 SQL ID 进行比较?
Posted
技术标签:
【中文标题】如何将上下文变量与 Django 模板中的 SQL ID 进行比较?【英文标题】:How can i compare a context variable with a SQL ID in a Django template? 【发布时间】:2014-08-25 07:45:27 【问题描述】:我正在制作一个愿望清单类型的网站,其中突出显示了用户最后一次更改的行。但是,我在这样做时遇到了麻烦,因为显然在上下文变量上使用了 '==' 并且对象的 ID 没有返回 true,尽管它们看起来相同。
例如,这是我正在拨打的render
电话:
def wishlist(request):
...
user_change = request.COOKIES.get('voted_or_added', False)
return render(request, 'xbox_wishlist/wishlist.html', 'user_change': user_change, )
然后在我的模板中,我有:
...
<tbody>
% for game in ranked_wishlist %
% if user_change == game.id %
<tr style="background: #80FF80;">
% else %
<tr>
% endif %
...
我尝试同时显示 game.id
和 user_change
,它们都在正确的位置显示相同的数字,但是if
语句的谓词似乎永远不会评估为True。我尝试用in
替换==
,我尝试交换他们的位置,我尝试了所有方法,但似乎没有任何效果。
有什么想法吗?
【问题讨论】:
【参考方案1】:From the Django documentation
HttpRequest.COOKIES
包含所有 cookie 的标准 Python 字典。键和值都是字符串。
所以问题是user_change
是一个字符串,而game.id
是一个整数。在python中一个整数,它的字符串表示不相等。
试试这个:
user_change = int(request.COOKIES.get('voted_or_added', -1))
return render(request, 'xbox_wishlist/wishlist.html', 'user_change': user_change, )
【讨论】:
呃,做到了。这发生在我身上,但我不确定如何在模板中转换为 int/string……在传入之前没想到要这样做——谢谢! There are some tips to do that in this question,但总的来说,您希望将这种逻辑保留在您的视图中,而不是您的模板中。以上是关于如何将上下文变量与 Django 模板中的 SQL ID 进行比较?的主要内容,如果未能解决你的问题,请参考以下文章
如何将带有上下文变量的 Django 模板发送到 Ajax 调用?
Django 如何将自定义变量传递给上下文以在自定义管理模板中使用?
如何在 Django 2.1 中的模板内的 for 循环内设置变量?