django首字符加粗过滤器的代码编写学习

本文介绍了在Django中如何编写一个自定义模板过滤器,用于将文本的首字符加粗显示。在遇到输出字符被转义的问题时,通过分析文档和参考他人博客,探讨了is_safe标签和needs_autoescape参数的使用,最终实现手动控制自动转义的功能。
html模板代码
<p>Dear {{ person_name|initial_letter_filter }}</p>
第一版
@register.filter(name='initial_letter_filter')#注册过滤器
@stringfilter                                 #转为字符串
def initial_letter_filter(value):
    '''
    将首个字加粗
    :param value:传入的值
    :return:html代码
    '''
    first,other = value[0],value[1:]
    result = '<strong>{}</strong>{}'.format(first,other)
    return result
结果

与目标差距:输出字符被转义
解决方案:避免被转义
将filter加上is_safe标签
@register.filter(name='initial_letter_filter',is_safe=True)#注册过滤器
我加了,但是没用
文档中有这么一句话 
This flag tells Django that if a “safe” string is passed into your filter, the result will still be “safe” and if a non-safe string is passed in, Django will automatically escape it, if necessary.
这个标志告诉Django 如果"安全"的字符串传递到您的过滤,结果仍将是"安全",如果一个非安全字符串传递,如果必要Django 会自动转义它。
具体用法,在这个兄弟的博客里https://www.cnblogs.com/thunderLL/p/7645111.html被分析了,我也参照学习了他的,嗯。。有需要的跳吧

所以根据需求 选另一种方法 使用need_autoescape进行手动控制

@register.filter(name='initial_letter_filter',needs_autoescape=True)
def initial_letter_filter(text, autoescape=True):
    first, other = text[0], text[1:]
    if autoescape:
        esc = conditional_escape
    else:
        esc = lambda x: x
    result = '<strong>{}</strong>{}'.format(first, other)
    return mark_safe(result)



                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值