网易首页 > 网易号 > 正文 申请入驻

1个JS文件,为何在books和authors页面表现完全不同?

0
分享至

一个JavaScript文件,放在books页面要输出"books",放在authors页面要输出"authors",你会怎么写?

最直接的办法是堆if语句。判断当前路径,走不同分支。代码能跑,但每加一个页面就多一个if,逻辑越缠越紧,改一处怕碰坏另一处。


有没有一种写法,让调用方根本不知道具体逻辑从哪来,只管执行?Django的模板系统加上JavaScript的import maps,正好能拼出这个效果。

先搞清楚要解决什么

策略模式是一种行为型设计模式,核心是在运行时选择算法。代码不直接实现某个算法,而是接收运行时的指令,决定用一组算法里的哪一个。

放到前端场景里,就是同一段调用逻辑,在不同页面加载不同的实现。

传统写法长这样:

  • 判断路径是不是books,是就写入books的文案
  • 判断路径是不是authors,是就写入authors的文案
  • 每多一个页面,就多一个判断分支

这种代码的膨胀速度,写过的人都懂。真正想做的,是把"用哪个实现"这件事从调用方剥离出去。

理想状态下,调用方只写一行:从strategy模块导入renderText,然后执行。至于strategy指向哪个文件,调用方不关心。

import maps补上了关键一环

这里说的是JavaScript的ES模块,语法是import ... from "module-name"。

ES模块有个特点:它是静态的,运行时不能改。而且直到不久前,浏览器根本不支持裸导入——也就是import { renderText } from "strategy"这种写法,strategy不是路径,浏览器不知道去哪找。

这种裸导入以前只有webpack这类模块打包器支持。

变化来自JavaScript import maps。它的作用是控制import语句最终去抓取哪个URL。有了它,浏览器里也能用裸导入,而且导入的URL可以在运行时被替换。

再叠加上Django模板系统的灵活性,一个简化版的策略模式就能落地了。

靠模板继承来换实现

具体做法利用了Django模板的一个能力:子模板可以继承父模板,并覆盖指定的模板块。

流程拆开就两步:

  1. 子模板继承父模板
  2. 子模板覆盖js块,在里面声明自己的import map

示例项目由三个应用组成。core放基础模板和基础JavaScript文件,authors和books各自继承core的基础模板。

core应用里,base.html声明了content和js两个可被覆盖的模板块,同时加载一个JavaScript模块。这个基础文件Base.js的内容很干净:从strategy导入renderText,然后执行。它完全不知道strategy这个文件在哪。

authors应用的list.html继承core的base.html,覆盖js块,声明自己的import map,把strategy指向authors/js/Authors.js,然后用block.super保留父模板原有的内容。

在Authors.js里,导出renderText函数,写入对应的文案。books应用照同样的方式做一遍,把strategy指向自己的文件。

结果就是:Base.js一个字没改,在books页面和authors页面跑出了不同的行为。

几个值得注意的细节

模块导入名不一定是strategy,可以叫任何名字,只要子模板里引用的是同一个名字就行。

另外,Django社区已经在推进相关支持。Matthias Kestenholz基于Thibaud Colas此前的工作,提出了一个给Django添加ImportMap对象的提案,值得关注后续进展。

这个方案的价值不在于多巧妙,而在于它把"选择哪个实现"这件事,从JavaScript代码里挪到了模板层。调用逻辑保持稳定,变化被隔离在各自的子模板中。对多应用、多页面共享同一段前端逻辑的Django项目来说,这是一种值得一试的组织方式。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
王楚钦直言亚运会每个瞬间都不舒服,要好好想想未来,前国乒教练:他的难题前几代主力都没有经历过

王楚钦直言亚运会每个瞬间都不舒服,要好好想想未来,前国乒教练:他的难题前几代主力都没有经历过

尘语者
2026-10-04 12:35:06
赵今麦海边泳装照冲上热搜,网友硬说像纸尿片,我看完直接笑出声

赵今麦海边泳装照冲上热搜,网友硬说像纸尿片,我看完直接笑出声

手工制作阿歼
2026-10-04 02:48:52
上将退休后,还有警卫员吗?

上将退休后,还有警卫员吗?

袁老师说历史
2026-10-04 15:12:44
四川曾有老虎,为什么没吃大熊猫?护林员说:80%的人不知道,老虎就算“饿疯了”,也不会将大熊猫当作美餐

四川曾有老虎,为什么没吃大熊猫?护林员说:80%的人不知道,老虎就算“饿疯了”,也不会将大熊猫当作美餐

回京历史梦
2026-10-04 02:50:05
突发!跟腱断裂!得分王就这样赛季报销,更可怕的是……

突发!跟腱断裂!得分王就这样赛季报销,更可怕的是……

体育新角度
2026-10-04 20:29:04
国庆77周年招待会,这13位上将亮相!

国庆77周年招待会,这13位上将亮相!

华山穹剑
2026-10-04 20:30:26
乌克兰已完全停止钢铁生产

乌克兰已完全停止钢铁生产

俄罗斯卫星通讯社
2026-10-04 16:09:26
真的辣眼睛!苦命的鸳鸯,在田野里的私会,却是最美的风景吗

真的辣眼睛!苦命的鸳鸯,在田野里的私会,却是最美的风景吗

史海流年号
2026-10-03 15:16:56
伟大的2-0!中国香港队夺冠了!3战全胜0失球,国际足联主席颁奖

伟大的2-0!中国香港队夺冠了!3战全胜0失球,国际足联主席颁奖

绿茵舞着
2026-10-04 00:09:12
我娶了俄罗斯退役女兵,一个月50次夫妻生活,她却从不提家里人,岳父病危时我塞给她24万,直到10年后我去银行贷款,柜员一句话让我当场愣住

我娶了俄罗斯退役女兵,一个月50次夫妻生活,她却从不提家里人,岳父病危时我塞给她24万,直到10年后我去银行贷款,柜员一句话让我当场愣住

故事情感屋
2026-10-03 15:54:33
贵州3岁坠楼男童已出院,母亲带纸条跪谢店主:我是聋哑人,只能把想说的话写纸上;店主:说实话受不起这一跪,毕竟只是凑巧雨棚救了小孩

贵州3岁坠楼男童已出院,母亲带纸条跪谢店主:我是聋哑人,只能把想说的话写纸上;店主:说实话受不起这一跪,毕竟只是凑巧雨棚救了小孩

大风新闻
2026-10-04 19:26:04
财政部部长蓝佛安:推进消费税征收环节后移并稳步下划地方、地方附加税改革等,支持地方拓展税源

财政部部长蓝佛安:推进消费税征收环节后移并稳步下划地方、地方附加税改革等,支持地方拓展税源

界面新闻
2026-10-01 13:02:49
真没想到!逼空姐下跪的那个人,东航直接把名字甩出来了:欧某某,照片也被网友扒出来了

真没想到!逼空姐下跪的那个人,东航直接把名字甩出来了:欧某某,照片也被网友扒出来了

世界圈
2026-10-04 20:34:52
深圳公开赛奖金分配:吴宜泽10-5夺冠157万!常冰玉8万,丁俊晖4万

深圳公开赛奖金分配:吴宜泽10-5夺冠157万!常冰玉8万,丁俊晖4万

球场没跑道
2026-10-04 22:22:41
香港过亿豪宅被曝偷工减料,部分位置钢筋少约41%-75%,屋宇署约见开发商

香港过亿豪宅被曝偷工减料,部分位置钢筋少约41%-75%,屋宇署约见开发商

爆角追踪
2026-10-04 18:21:21
6场比赛仅首发1次!国足中场天才之星惨遭安东尼奥冷落,沦为亚运鸡肋

6场比赛仅首发1次!国足中场天才之星惨遭安东尼奥冷落,沦为亚运鸡肋

零度眼看球
2026-10-04 08:46:39
王楚钦出镜海报!媒体人:5枚银牌得主更该出现,为何就他破例

王楚钦出镜海报!媒体人:5枚银牌得主更该出现,为何就他破例

奥拜尔
2026-10-04 14:39:48
真没想到!逼空姐下跪的那个人,东航直接把名字甩出来了:欧某某,照片也被网友扒出来了

真没想到!逼空姐下跪的那个人,东航直接把名字甩出来了:欧某某,照片也被网友扒出来了

火山詩话
2026-10-04 19:12:28
王楚钦0金入选!媒体删除亚运争议海报 网友:你让其他拿金牌的咋想

王楚钦0金入选!媒体删除亚运争议海报 网友:你让其他拿金牌的咋想

动物奇奇怪怪
2026-10-04 11:52:01
成都有回锅肉3片卖105元?店主:明码标价,一片有六七两重,另有套餐12元起

成都有回锅肉3片卖105元?店主:明码标价,一片有六七两重,另有套餐12元起

封面新闻
2026-10-04 20:41:06
2026-10-04 23:28:49
报错免疫体
报错免疫体
一名在需求评审和数据异常中反复横跳的产品运营。
150文章数 71关注度
往期回顾 全部

科技要闻

苹果确认:iPhone 18 Pro Max有问题

头条要闻

30多岁中国夫妇在澳洲遇惨烈车祸丧生 肇事司机仅17岁

头条要闻

30多岁中国夫妇在澳洲遇惨烈车祸丧生 肇事司机仅17岁

体育要闻

“小将”吴曦,中国的莫德里奇

娱乐要闻

高晓松悄悄复出:官媒没给他留体面

财经要闻

OpenAI前安全部门员工:公司文化已崩坏

汽车要闻

方程豹9月热销破4万 首款皮卡鲨鱼将于四季度上市

态度原创

旅游
教育
亲子
时尚
艺术

旅游要闻

官方通报“阿尔山景区二百一晚的大酒店”

教育要闻

分数不等于实力:这4所985,常被地域和专业标签低估

亲子要闻

工程车小故事:吃糖果

谭卓&胡一天,邀你一起“网”下面基

艺术要闻

深圳歌剧院建设再提速,6大标段齐发,超12亿元!

无障碍浏览 进入关怀版