如何在Jinja2中优雅检查路径是否为绝对路径?(pydata-sphinx-theme场景)
改进pydata-sphinx-theme中路径绝对/相对的判断逻辑
当前代码仅通过startswith("http")判断远程URL,无法识别本地绝对路径(如/static/logo.png)或其他协议的绝对路径(如ftp://、file://),可以通过扩展判断条件来覆盖更多场景:
优化后的代码示例
{% set is_absolute = image_light.startswith(('http://', 'https://', 'ftp://', 'file://')) or image_light.startswith('/') %} {% set image_light = image_light if is_absolute else pathto('_static/' + image_light, 1) %}
逻辑说明
- 首先判断路径是否属于远程绝对路径:匹配
http://、https://、ftp://、file://开头的协议URL - 再判断是否属于本地绝对路径:匹配以
/开头的路径(适用于Unix/Linux/类Unix环境) - 若都不满足,则按相对路径处理,通过
pathto拼接_static目录
如果需要兼容Windows系统的本地绝对路径(如C:\static\logo.png),可以补充判断规则:
{% set is_windows_absolute = image_light|length > 2 and image_light[1] == ':' and image_light[2] in ('\\', '/') %} {% set is_absolute = image_light.startswith(('http://', 'https://', 'ftp://', 'file://')) or image_light.startswith('/') or is_windows_absolute %} {% set image_light = image_light if is_absolute else pathto('_static/' + image_light, 1) %}
这种写法既保持了代码的可读性,又覆盖了绝大多数绝对路径的场景,比单一的http判断更严谨。
内容的提问来源于stack exchange,提问作者Pierrick Rambaud
相关产品推荐
相关产品推荐

