中文标题: 连接 Bootstrap5 Alert 样式和 Django Message Tags
在开发过程中,AI 生成了如下的代码:
{% if messages %}
<div class="alert alert-{{ message.tags }}" role="alert">
{{ message }}
</div>
{% endif %}
from django.contrib import messages
...
messages.add_message(request, messages.ERROR, 'Info message')
但是,AI 生成的代码无法工作,因为 Bootstrap5 Alert 样式和 Django Message Tags 之间没有直接的映射关系。 在这里,我们想要的是红色的错误消息,但因为上述原因,我们实际看到的只有文字,没有 alert 样式。
为了实现这个目标,我们需要新增一个 filter, 在模板中使用。
如下是新增的 filter 文件 your_django_app/templatetags/template_filters.py
# api2d/templatetags/template_filters.py
from django import template
from django.contrib.messages import constants
register = template.Library()
@register.filter
def bootstrap_alert_class(message_tag):
"""
Maps Django's message tags to Bootstrap's alert classes.
Django passes message tags as strings (e.g., 'error', 'success'),
so we map these directly to Bootstrap's alert classes.
"""
MAPPING = {
'error': 'danger',
'success': 'success',
'info': 'info',
'warning': 'warning',
'debug': 'secondary',
}
# Convert to lowercase to handle case variations
return MAPPING.get(message_tag.lower(), message_tag)
然后在模板中使用这个 filter:
{% load template_filters %} <!-- Add this line -->
{% if messages %}
{% for message in messages %}
<div class="alert alert-{{ message.tags|bootstrap_alert_class }}" role="alert"> <!-- Use the filter -->
{{ message }}
</div>
{% endfor %}
{% endif %}