You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用web.py访问动态URL时base layout中CSS/JS不加载如何解决

问题复现

开发Web项目使用web.py框架,配置的URL结构如下:

urls = (
    '/', 'Home',
    '/register','Register',
    '/postregistration', 'PostRegistration',
    '/login', 'Login',
    '/check-login', 'CheckLogin',
    '/logout', 'Logout',
    '/post-activity', 'PostActivity',
    '/profile/(.*)/info', 'userInfo',
    '/profile/(.*)', 'Profile',
    '/abcd', 'abcd'
    )

其余页面访问均正常,访问/profile/anything这类带动态参数的URL页面时,base layout中引入的CSS与JS文件都没有加载成功,请求到的所有CSS、JS文件内部实际存储的是HTML内容。
异常情况截图

问题根因

base layout中使用相对路径引入静态资源,当访问二级路径/profile/xxx时,浏览器会自动将当前页面路径作为前缀拼接静态资源地址,实际请求地址变为/profile/xxx/css/xxx.css,该地址命中配置的/profile/(.*)动态路由,返回Profile页的HTML内容,导致静态资源内容异常。

解决方案
  • 将所有静态资源引用改为绝对路径,开头统一加/。例如将href="css/style.css"改为href="/css/style.css",src="js/common.js"改为src="/js/common.js",浏览器会直接从站点根目录请求资源,不会拼接当前页面路径。
  • 在base layout的<head>标签内添加<base href="/">,页面内所有相对路径的资源引用都会自动基于站点根路径解析,无需逐个修改资源引用地址。
  • 如果静态资源统一存放在指定目录(比如static目录),可以在URL配置最前面添加静态资源路由,优先级高于所有动态路由,避免被动态规则拦截:
urls = (
    '/static/(.*)', web.StaticApp, {'root': 'static'},
    # 原有其他路由
)

内容的提问来源于stack exchange,提问作者Deep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:00:01