Python中如何将动态URL变量转为短信中的可点击链接?
问题解决:动态生成URL无法在短信中显示为可点击链接
问题分析
动态拼接的url_sale仅显示纯文本,但静态HTTPS URL能正常识别为可点击链接,核心原因大概率是动态URL的格式不符合短信系统的链接识别规则,常见场景包括:
base_url未包含完整的http://或https://协议头,导致生成的URL以域名/IP开头,无法被识别为有效链接- 多行字符串中URL周围的缩进空白字符干扰了链接识别
- 部分短信服务对URL解析有严格格式要求,纯文本URL需满足规范才能被转换
解决方案
1. 确保base_url包含完整协议头
先检查Odoo配置项web.base.url是否带有协议头,若没有则手动补充:
base_url = self.env['ir.config_parameter'].get_param('web.base.url') # 自动补全协议头,优先使用HTTPS if not base_url.startswith(('http://', 'https://')): base_url = f'https://{base_url}' # 使用f-string更简洁地拼接参数 url_sale = f"{base_url}/web#id={record.id}&view_type=form&model={record._name}"
2. 移除URL周围的空白字符
你的多行message字符串中,{url_sale}被大量缩进空格包裹,可能导致URL无法被正确识别。可以去除多余缩进或使用strip()清理:
vals = {'mobile': employee.mobile_phone, # 注意原代码中`empoyee`拼写错误,已修正 'message_type': 'message', 'message': f"""Quotation approval request Hello Approvers, Quotation approval {record.name} has been raised by {record.user_id.name}. Please review and approve or reject (with reason given) this quotation. {url_sale.strip()} """ }
3. 手动使用短信支持的链接格式(若服务兼容)
如果你的短信网关支持Markdown格式,可以将URL包装为标准链接形式:
message = f"""Quotation approval request Hello Approvers, Quotation approval {record.name} has been raised by {record.user_id.name}. Please review and approve or reject (with reason given) this quotation. [查看报价单]({url_sale}) """
注意:需先确认短信服务是否支持Markdown语法,不兼容的话会显示原始Markdown文本。
4. 验证生成的URL有效性
打印url_sale确认格式正确,示例有效输出:
print(url_sale) # 输出:https://your-odoo-domain.com/web#id=123&view_type=form&model=sale.order
检查是否存在参数拼接错误、特殊字符未转义等问题。
额外提示
原代码中empoyee拼写错误,修正为employee可避免运行时报错。
内容的提问来源于stack exchange,提问作者Sidharth Panda
相关产品推荐
相关产品推荐

