Gofiber + Django模板递归渲染异常问题求助
递归Django模板渲染多层文件夹结构的稳定解决方案
问题背景
- 使用Bootstrap折叠面板生成文件夹结构,1级深度渲染正常,但2级及以上深度无法正常工作
- 服务运行在Docker容器中,根模板通过循环调用
partials目录下的子模板,子模板需递归自身实现多层渲染 - 初始用
{% include "partials/subfolder_template.django" with folder=folder %}时服务无法启动;改为{% include "subfolder_template.django" with folder=folder %}后服务启动且递归有效,但容器重启后报错:failed to render: template department/media_view does not exist - 临时修改(删除子模板递归行再恢复)可临时支持N层深度,但容器重启后仅支持2层
稳定解决步骤
1. 修复变量名冲突(核心问题)
子模板中循环变量与传入的folder变量重名,导致递归时变量被覆盖,引发渲染异常。将循环变量改为subfolder,并替换所有内部引用:
修改后的partials/subfolder_template.django:
{% for subfolder in folder.Subfolders %} <div class="container-fluid w-100 h-100 text-center pt-3"> <div class="card multi"> <div class="card-header" role="tab" id="heading{{subfolder.Name}}"> <h5 class="mb-0"> <a class="r2_image_link collapsed" data-toggle="collapse" data-parent="#accordion" style="text-transform: uppercase;" href="#collapse{{subfolder.Name}}" aria-expanded="false" aria-controls="collapse{{subfolder.Name}}"> <i class="fa-solid fa-folder" style="color: #e4b91b;"></i> {{subfolder.Name}} </a> </h5> </div> <div id="collapse{{subfolder.Name}}" class="collapse" role="tabpanel" aria-labelledby="heading{{subfolder.Name}}"> <div class="card-block"> <ul class="collapsible-list"> {% for image in subfolder.Images %} <div class="d-flex justify-content-between align-items-center" style="padding-bottom: 10px; padding-top: 10px; border-bottom: 1px solid rgb(104, 104, 104);"> <img width="50px" src="https://{{Domain}}/{{image.URL}}"> <a class="r2_image_link copy-text" data-alt="https://{{Domain}}/{{image.URL}}"> <p style="padding-left: 30px;">{{subfolder.Name}}</p> </a> </div> {% endfor %} {% if subfolder.Subfolders %} <div class="container-fluid w-100 h-100 text-center pt-3"> <ul> {% include "partials/subfolder_template.django" with folder=subfolder %} </ul> </div> {% endif %} </ul> </div> </div> </div> </div> {% endfor %}
2. 确认模板目录配置
在Django的settings.py中,确保TEMPLATES配置包含partials所在的模板根目录:
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [BASE_DIR / 'templates'], # 假设partials目录在templates/partials下 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
3. 清理Docker缓存并重构服务
临时修改导致的缓存残留会引发重启后的异常,执行以下命令彻底清理:
docker-compose down docker system prune -af docker-compose up --build
4. 修正Bootstrap折叠面板ID格式
原模板中折叠面板ID包含/符号,会导致DOM选择器异常,统一去掉特殊字符,确保每个折叠面板的id、href、aria-controls属性完全对应,避免多层展开/折叠失效。
内容的提问来源于stack exchange,提问作者Liam Gomez
相关产品推荐
相关产品推荐

