如何混淆jinja2中变量中的数据?例如variable =“ John Smith”,我想要类似“ Odsv Wgtvs”

时间:2019-01-22 21:07:06

标签: python django jinja2

因此,我试图创建一个页面,其中仅向登录的用户显示详细信息。我能够使用来静态更改内容

{% if user.is_authenticated %}

所以我可以用{{ celebrity.name来代替Dummy Name}},但是每次出现的情况都是相同的。

我希望有一种简单的方法可以弄乱celebrity.name来混淆实际数据。

如果没有简单的方法,我会很乐意编写自己的函数,但是目前我不确定是否应该在html模板的jinja2中编写它,还是应该在views.py中编写它。不胜感激。

2 个答案:

答案 0 :(得分:2)

您可以编写自己的custom template filter

from django import template
register = template.Library()

@register.filter
def obfuscate(value, user):
    if user.is_authenticated():
        return value

    # do something before returning
    return '#SECRET#' + value + '#SECRET#'

这可以是模板中的用户:

{{ celebrity.name|obfuscate:user }}

如果混淆必须是确定性的(相同的值始终会产生相同的混淆结果),则可以使用哈希函数(将返回不完整的名称,而不是实名),或者使用固定的字典来替代名称,或者其他

如果替换不能确定,则可以使用一些随机的char替换。

答案 1 :(得分:1)

使用set

{% if user.is_authenticated %}
  {% set celebrity_name = celebrity.name %}
{% else %}
  {% set celebrity_name = "dummy" %}

还是您想要唯一的伪值..?如果要使用其他值,则可以将Python中的任何内容分配给celebrity_name