Django无法找到leaflet admin widget.html模板的问题求助
Django Admin使用LeafletGeoAdmin时模板找不到的问题
问题场景
我在Django Admin中尝试使用LeafletGeoAdmin,代码如下:
from leaflet.admin import LeafletGeoAdmin @admin.register(Marker) class MarkerAdmin(LeafletGeoAdmin): list_display = ("name", "location")
添加标记时出现TemplateDoesNotExist错误:
TemplateDoesNotExist at /admin/my_app/marker/add/ Exception Value: leaflet/admin/widget.html Django tried loading these templates, in this order: django.template.loaders.filesystem.Loader: /home/me/my_map/.venv/lib/python3.10/site-packages/django/forms/templates/leaflet/admin/widget.html (Source does not exist) django.template.loaders.app_directories.Loader: /home/me/my_map/my_map/templates/leaflet/admin/widget.html (Source does not exist) ... etc ...
找到模板实际位置:
/home/me/my_map/.venv/lib/python3.10/site-packages/leaflet/templates/leaflet/admin/widget.html
已尝试在settings.py的TEMPLATES中添加路径,但问题依旧:
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR,'my_app','templates'), '/home/me/my_map/.venv/lib/python3.10/site-packages/leaflet/templates/', os.path.join(BASE_DIR,'.venv/lib/python3.10/site-packages/leaflet/templates/') ], ...
疑问
- 为什么django-leaflet无法识别正确的模板路径?
- 为什么Django无法找到我指定路径下的模板?
问题1:django-leaflet无法识别正确路径的原因
django-leaflet作为Django第三方应用,正常情况下会通过app_directories.Loader自动加载它的模板——因为它的templates目录符合Django应用的模板结构。出现识别失败的核心原因,大概率是你没把leaflet添加到settings.py的INSTALLED_APPS中。Django只会自动扫描INSTALLED_APPS内应用的templates目录,没添加的话自然找不到对应的模板文件。
问题2:手动添加路径无效的原因
你添加的路径是/.../leaflet/templates/,而模板查找路径是leaflet/admin/widget.html,两者拼接后正好是模板的实际位置,理论上应该能找到。如果还是失败,可能是这几个原因:
- 路径拼写错误:比如
BASE_DIR指向不正确,或者虚拟环境的Python版本号(比如是不是实际用的3.10)写错了 - 模板加载缓存:Django可能缓存了旧的模板配置,需要重启服务刷新
- 加载器优先级问题:即使
filesystem.Loader在前面,若路径存在拼写误差,还是会匹配失败
正确解决步骤
- 核心操作:把
leaflet加入INSTALLED_APPS
INSTALLED_APPS = [ # 其他已有应用... 'leaflet', ]
- 删掉
TEMPLATES里手动添加的leaflet模板路径——只要leaflet在INSTALLED_APPS中,Django会自动扫描它的模板目录,不需要手动配置 - 重启Django开发服务器,再尝试添加标记
如果问题仍存在,检查django-leaflet安装完整性,可重新安装一次:
pip install --upgrade django-leaflet
内容的提问来源于stack exchange,提问作者Bret Hess
相关产品推荐
相关产品推荐

