You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django敏感用户信息隐藏模板标签:邮箱部分替换为X实现问询

实现Django模板中邮箱部分隐藏的方案

嘿,这个需求挺常见的!Django没有提供直接将字符串部分内容替换为X的内置模板标签/过滤器,不过我们可以通过自定义模板过滤器来轻松实现你要的效果,而且灵活性拉满,完全能按照你的需求调整隐藏规则。

步骤1:自定义模板过滤器

首先在你的Django应用里创建一个templatetags目录(如果还没有的话),这个目录必须包含__init__.py文件(空文件就行),然后新建一个过滤器文件,比如email_masking.py。

在email_masking.py里写入以下代码:

from django import template

register = template.Library()

@register.filter(name='mask_email')
def mask_email(email, keep_prefix_length=4):
    """
    隐藏邮箱部分内容,默认保留前4个字符,其余替换为X
    示例:myacctspecial@gmail.com → myacXXXXXXXXXXXXXXXXXX
    """
    if not email or '@' not in email:
        return email  # 非邮箱格式直接返回原内容
    
    # 👇 如果你想只隐藏用户名部分、保留域名,用这段逻辑(更实用)
    # username, domain = email.split('@', 1)
    # masked_username = username[:keep_prefix_length] + 'X' * max(0, len(username) - keep_prefix_length)
    # return f"{masked_username}@{domain}"
    
    # 👇 如果你想隐藏除前N个字符外的所有内容(包括域名),用这段(匹配你的示例)
    if len(email) <= keep_prefix_length:
        return email
    return email[:keep_prefix_length] + 'X' * (len(email) - keep_prefix_length)

代码里我标注了两种常见的隐藏逻辑,你可以按需选择:

  • 第一种是只隐藏用户名、保留域名(比如myacXXXXXXXX@gmail.com),这种更符合多数场景,用户能识别邮箱归属;
  • 第二种是完全隐藏前N个字符后的所有内容,和你给出的示例效果一致。

步骤2:在模板中使用过滤器

  1. 先在模板文件顶部加载自定义过滤器:
{% load email_masking %}
  1. 然后在需要展示邮箱的地方调用过滤器:
{# 使用默认规则,保留前4个字符 #}
{{ user.email|mask_email }}

{# 自定义保留前5个字符 #}
{{ user.email|mask_email:5 }}

小提醒

  • 确保你的应用已经添加到settings.py的INSTALLED_APPS里,不然模板找不到自定义过滤器;
  • 写完过滤器后记得重启Django开发服务器,新过滤器才会生效哦。

内容的提问来源于stack exchange,提问作者user10421193

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:33:01