django-tables2使用linkify参数时如何设置链接在新窗口打开?
解决方案
以下两种方法都可以实现需求,你可以根据自己的使用场景选择:
方法1:给当前列所有链接统一设置target(最简便)
无需修改原有linkify_sale函数,直接在Column定义中新增attrs参数指定a标签属性即可:
def linkify_sale(**kwargs): record = kwargs.get("record") if record: return f"https://...url...#{record.get('order_sale_id')}" class ASA_Journal_ViewTable(tables.Table): ... order_sale_nbr = tables.Column( verbose_name="Sales Order Number", linkify=linkify_sale, # 新增以下属性配置 attrs={"a": {"target": "_blank", "rel": "noopener noreferrer"}} )
补充说明:添加
rel="noopener noreferrer"是前端安全通用最佳实践,可避免新开页面获得原页面的操作权限,降低安全风险。
方法2:动态控制链接属性(适合按行数据差异化配置的场景)
如果需要根据不同行的记录内容动态判断是否加target、或者设置不同的属性值,可以修改linkify_sale函数,直接返回包含url和属性配置的字典:
def linkify_sale(**kwargs): record = kwargs.get("record") if record: return { "url": f"https://...url...#{record.get('order_sale_id')}", "attrs": {"target": "_blank", "rel": "noopener noreferrer"} # 这里可自定义判断逻辑,比如符合特定条件才返回target属性 } class ASA_Journal_ViewTable(tables.Table): ... order_sale_nbr = tables.Column(verbose_name="Sales Order Number", linkify=linkify_sale)
内容的提问来源于stack exchange,提问作者Tim Richardson
相关产品推荐
相关产品推荐

