ByteNoteByteNote
反查地址要带上命名空间
字

字节笔记本

2026年10月7日 · 约 4 分钟读完

反查地址要带上命名空间

API中转
¥120

路由可以起名字。模板和代码用名字反查地址,而不是把路径写死。同一套路由要挂到两个前缀下面时,还要有命名空间。对话里的模板和反向解析只用了短名字。主路由已经写了命名空间时,这样反查对不上。

短名字只够用一次

应用路由里有一条带整数年份的路径,名字是 news-year-archive,视图是 year_archive。模板用 url 标签,传入这个名字和 2012。代码里用 reverse,参数是同一年。2012 填进年份。

反查要带上命名空间

以后路径前缀改了,模板和反向解析不用改那串地址,只要名字还在。这条例子没有命名空间。只有一个应用、名字不冲突时,短名字就够。

主路由把同一份 polls.urls 挂了两次。一次前缀是 author-polls,命名空间也是 author-polls。另一次前缀是 publisher-polls,命名空间也是 publisher-polls。两套地址共用同一批名字,又不会撞车。

带了命名空间之后,反查不能再只写 news-year-archive 这种短名字。要写成命名空间、冒号、名字。模板标签和 reverse 都是这个形式。对话后半只演示了不带命名空间的写法,没有把冒号形式补上。

两段接在一起用,运行时会找不到名字。年份那一条和投票那一套是两则例子,不要把年份的名字直接当成投票路由里的名字。接命名空间时,用的是被挂载那份路由里真实存在的名字。

同一份路由被挂两次并声明命名空间时,这份路由文件里还要有应用名。没有应用名,启动会拒绝这个命名空间,而不是等到第一次反查才失败。对话的主路由片段没有写出应用名那一行。

接上命名空间之前,先在被挂载的文件里写上应用名。应用名和你在 include 里声明的命名空间是配套的。只有命名空间、没有应用名,项目起不来。

只挂一次就不要画蛇添足。模板和 reverse 传同样的参数。路径里的年份是整数转换,不要传一段非数字,否则匹配在转换时失败,和名字无关。

对话把优点写成可读、避免写死、避免重名。避免重名靠的是命名空间,不是只靠短名字。两个应用都有一个叫 detail 的名字时,短名字无法区分。

改路径时只改路由表。引用处继续用名字。这是起名字的原因。如果引用处仍写死地址,名字就没有发挥作用。

安装、创建项目、创建应用、把应用放进已安装列表、写模型、生成迁移并执行、写视图、写路由、写模板、再跑开发服务器,是起名字之前的骨架。应用没放进已安装列表,模型迁移不会带上它。

挂两次就要冒号

路由名字解决不了迁移。数据库还没有这张表时,反查地址仍然可以成功,请求进视图后才会在查询里失败。两件事分开看。

被挂载的文件里要有应用名

开发服务器是 runserver。路由改完要重启或等待自动重载。重载之后再点模板里的链接,确认生成的地址带上了你选的前缀。

作者那一套和发布者那一套前缀不同。页面上要去哪一套,反查就用哪一个命名空间。用错命名空间,地址会进到另一套相同的视图。

参数顺序要和路径里的变量一致。年份例子只有一个参数,位置参数用元组传 2012。多个参数时,顺序错了会填进错误的变量。

模板里的 url 标签和代码里的 reverse 必须使用同一个名字。一边改了名字、另一边没改,点链接和重定向会去不同的地方,或一边直接报错。

对话没有演示应用名的赋值。不要凭空写一个和命名空间不一致的应用名就认为能挂上。先让启动不再拒绝 include,再改模板里的反查字符串。

整数年份的例子用 2012。这是参数示例,不是某一年的业务规则。换成别的整数,路径里的那一段跟着变,名字不变。

没有命名空间的短名字,在你后来又给这份路由加上命名空间之后会全部失效。加命名空间是一次成套修改:路由文件、include、模板、reverse 一起改。

视图里重定向也走 reverse。只改了模板、视图里仍写短名字,表单提交后的跳转会找不到名字。搜索项目里这个名字的全部引用再改。

路径转换失败和名字缺失是两种报错。非数字年份在匹配阶段就拒绝。名字写错是在反查阶段报没有这个名字。看报错落在哪一层。

项目里只有一份路由时,不要提前加命名空间。等第二次挂载同一份文件时再加。过早的命名空间会让所有短名字突然失效。

对话从安装讲到跑起来,再单独讲名字和命名空间。使用时以第二段为准:短名字和命名空间不能各用一半。

相关文章

分享: