实际上,如果你在Django中使用Bootstrap5,那么他们将内容作为字符串传递的方法是完美的,并且与Django的模板包含是一致的。你可以用你需要的任何部分HTML创建一个模板文件,例如,Bootstrap5似乎没有x - edititable,所以你可能想要做一个行编辑和Ok|取消按钮作为内容。总之,这就是我的意思:
<button data-bs-content="{% include './popover_content.html' %}" type="button" class="btn btn-lg btn-danger" data-bs-toggle="popover" title="Popover title" >
Click to toggle popover
</button>
我的settings.py模板部分是这样的:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR / 'templates'],
'APP_DIRS': True, # True is necessary for django-bootstrap5 to work!
'OPTIONS': {
'debug': True,
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
我把我的模板(每一个应用程序)在<项目目录>/模板/<应用程序名称>文件夹。我有MyMainApp/popover_content.html右边的MyMainApp/home.html上面的示例代码进行了测试。但是如果你把模板放在每个应用的Django文件夹中,那么你需要在templates [0]{'DIRS': ['MyApp/templates', 'MyApp2/templates']}列表中添加"MyApp/templates"。
因此,至少这将使您能够将弹出窗口HTML以常规的、语法高亮显示的Django模板格式放置,并很好地利用将Django模板模块化为组件。
我个人打算用它来做一个可编辑的标签(标题和描述字段的一些数据在我的应用程序)。
一个缺点是如果你在包含:"{% include './popover_content.html' %}"时使用双引号("),那么你必须在整个popover_content.html'模板中使用单引号。
你还需要为弹出窗口启用html,所以你的站点范围的弹出窗口初始化器会这样:
<script type="text/javascript">
$(document).ready(() => {
var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'))
var popoverList = popoverTriggerList.map(
function (popoverTriggerEl) {
return new bootstrap.Popover(popoverTriggerEl, {
html: true,
});
});
});
</script>
下面是(无样式的)结果。总之,使用默认提供的字符串方法进行传入,并传入一个包含的Django模板文件。问题解决了!