Django 4.2.2升级后Admin ListView按钮引号转义异常问题
Django 4.2.2中ListView按钮HTML引号转义问题解决方法
问题原因
Django 1.X中的allow_tags=True属性在高版本中已被弃用,升级后Django默认会对返回的字符串进行HTML转义,导致原本的引号被双重转义为"。
解决方案
使用Django提供的mark_safe()函数标记HTML内容为安全,替代已弃用的allow_tags属性。
修改步骤:
- 导入
mark_safe工具:
from django.utils.safestring import mark_safe
- 修改
clone_button方法,用mark_safe()包裹返回的HTML字符串,并移除allow_tags=True:
def clone_button(self, obj): button = "<button type=\"button\" onclick=\"location.href='/admin/clone/%s/%s';\">Clone</button>" % (obj.id, "keep_date") return mark_safe(button) # 移除不再生效的 clone_button.allow_tags=True
可选优化:使用f-string简化代码
def clone_button(self, obj): button = f"<button type='button' onclick='location.href=\"/admin/clone/{obj.id}/keep_date\";'>Clone</button>" return mark_safe(button)
原理说明
mark_safe()会将字符串标记为“安全的HTML”,告诉Django不需要对其进行自动转义,从而保证按钮的HTML代码能正确渲染,引号只会被转义一次为",避免出现双重转义的&quot;。
内容的提问来源于stack exchange,提问作者ger.s.brett
相关产品推荐
相关产品推荐

