如何将上下文变量与 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 循环内设置变量?

如何在Django中访问子模板中的会话变量?

django 的模板标签“include”如何与 None 一起使用

我如何在Django模板标签中使用模板上下文变量的值? [重复]