Django Template Tag `url` 无法正常工作,请求排查解决
解决Django中NoReverseMatch: 'crudeoilsale-list'未找到的问题
从你描述的情况来看——路由列表只显示了^admin/和office/ ^$,但你定义的sales/crudeoilsale/路由没出现在里面,核心问题几乎可以确定是:你的sales模块路由没有被正确挂载到项目的主路由配置里,导致Django根本找不到crudeoilsale-list这个命名路由。
下面是一步步的解决方法:
1. 确保sales应用有独立的urls.py并被主路由引入
首先,先检查你的sales应用目录下是否有urls.py文件,如果没有就新建一个,把你的路由代码放进去:
# sales/urls.py from django.urls import path, url from .views import LVCla urlpatterns = [ url(r'^crudeoilsale/$', LVCla.as_view(), name='crudeoilsale-list'), ]
然后打开项目根目录的urls.py(也就是主路由文件),添加一行代码把sales的路由包含进来:
# 项目根目录/urls.py from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('office/', include('office.urls')), # 你已有的office路由 path('sales/', include('sales.urls')), # 新增这行,挂载sales的路由 ]
小贴士:如果你的Django版本是3.1及以上,推荐用
path代替url(url是re_path的别名,用于正则匹配),你的路由可以改成path('crudeoilsale/', LVCla.as_view(), name='crudeoilsale-list'),效果完全一样,写法更简洁。
2. 核对路由命名与模板引用的一致性
虽然你模板里的{% url 'crudeoilsale-list' %}写法没问题,但还是要再确认两点:
- 视图
LVCla在sales应用的views.py中确实存在,拼写完全正确 - 路由的
name参数确实是'crudeoilsale-list',大小写和模板里的完全匹配(Django的路由名称是区分大小写的)
3. 重启服务并验证路由
修改路由后,开发服务器可能不会自动刷新配置,建议:
- 关闭当前运行的
python manage.py runserver进程 - 重新启动开发服务器
- 如果你想直观看到所有已注册的路由,可以安装
django-extensions:
然后把pip install django-extensionsdjango_extensions加到项目settings.py的INSTALLED_APPS里,再运行:
查看输出列表里是否包含python manage.py show_urls/sales/crudeoilsale/对应的crudeoilsale-list命名路由。
内容的提问来源于stack exchange,提问作者Lorenzo Ang
相关产品推荐
相关产品推荐

