在Django中使用Jinja生成URL:空路径的url标签写法问题
解决Django Jinja url标签生成空路径的问题
嘿,这个问题我之前也踩过坑!其实核心问题是你没正确指定路由的name属性——你的第一个路由明明定义了name='foo',但在url标签里只写了命名空间myapp:,没带上这个关键的name值。
先看你的路由配置
urlpatterns = [ path('', views.foo, name='foo'), # 这里的name是'foo' path('hello/', views.hello, name='hello') ]
正确的url标签写法
第一个空路径的路由已经设置了name='foo',所以在Jinja模板里生成它的URL时,需要把命名空间和这个name结合起来,也就是:
<a href="{% url 'myapp:foo' %}">Link to Empty Path</a>
为什么{% url 'myapp:' %}不行?
Django的url标签要求你指定一个具体的路由name(或者URL模式的名称),只写命名空间加冒号的话,Django无法确定你要匹配命名空间下的哪一个路由——毕竟一个命名空间下可能有多个路由,它没法自动关联到空路径那一条。
不推荐的替代方案(硬编码)
如果你实在不想用name,也可以直接写空字符串,但这会失去url标签的最大优势:以后如果修改了路由的路径(比如把空路径改成home/),你需要手动修改所有模板里的硬编码路径,非常麻烦。所以还是优先用name的方式:
<!-- 不推荐,硬编码路径 --> <a href="/">Link to Empty Path</a>
内容的提问来源于stack exchange,提问作者brainLoop
相关产品推荐
相关产品推荐

