Django Reverse {% url %}错误:未找到匹配的视图函数或路由名称
嘿,这个问题我太熟了!你遇到的Reverse for '' not found错误,看起来是模板里的{% url %}标签写法出了问题——毕竟你视图里没用到reverse(),锅肯定在模板那边。结合你给出的代码,我给你梳理几个最可能的原因和解决办法:
1. 没正确使用应用命名空间
你的bookings/urls.py里已经设置了app_name='bookings',这意味着所有该应用下的URL都属于bookings这个命名空间。如果模板里直接写{% url 'booking' %},Django很可能找不到对应的视图(尤其是项目里有多个应用时)。
正确写法应该带上命名空间:
{% url 'bookings:booking' %}
或者用双引号也可以:
{% url "bookings:booking" %}
2. 模板里的引号使用混乱
错误提示里的'"'是HTML转义后的'"',说明你模板里的{% url %}标签大概率出现了引号嵌套错误,比如写成了:
{% url ""booking"" %} <!-- 错误:多打了一层双引号 --> {% url "'booking'" %} <!-- 错误:单引号套单引号 -->
这种写法会让Django把空字符串当成要反转的视图名,自然就会报'' is not a valid view function or pattern name。
解决办法:保证引号成对使用,要么全用单引号,要么全用双引号,不要嵌套混用。
3. 视图名拼写错误
检查模板里{% url %}标签里的名字,是不是和bookings/urls.py里的name参数完全一致。比如你urls里是name='booking',就不能写成'book'或者'bookings'——拼写错一个字符都会导致找不到。
快速验证URL配置是否正常
如果不确定是模板还是URL配置的问题,可以先在Django Shell里测试反向解析:
- 进入项目目录,运行:
python manage.py shell
- 在shell里输入:
from django.urls import reverse reverse('bookings:booking')
如果能正常返回'/book/booking/',说明你的URL配置完全没问题,问题100%出在模板的{% url %}标签写法上。
内容的提问来源于stack exchange,提问作者GRS

