使用Twitter引导设置Django错误样式
我正在Django项目中尝试使用twitter引导设置错误样式。现在,我有一个简单的表单,它要求一个人的电子邮件地址,让他们按下一个按钮,然后将其提交到数据库。它还进行验证检查,以查看电子邮件在数据库中是否唯一。如果它不是唯一的,则会引发一个错误,说明此电子邮件已注册。但是,当出现错误时,对于重复的电子邮件,它会在输入字段旁边显示一个丑陋的项目符号列表,其中包含该电子邮件已注册的文本。我正在尝试将其样式设置为在输入文本下显示一个带有黄色I图标的小对话框,就像输入不包含@符号时一样,即它不是电子邮件。当电子邮件中未包含有效域时,也会出现丑陋的要点,例如,没有附加.com 我认为问题在于表单html的设置方式,或者视图如何处理表单错误。也许,因为表单字段是EmailField,is_valid指示符不会验证,因此会显示twitter引导警报 如何让它每次都显示警报?下面是我的代码: 构成index.html的一部分使用Twitter引导设置Django错误样式,django,twitter-bootstrap,validation,error-handling,django-forms,Django,Twitter Bootstrap,Validation,Error Handling,Django Forms,我正在Django项目中尝试使用twitter引导设置错误样式。现在,我有一个简单的表单,它要求一个人的电子邮件地址,让他们按下一个按钮,然后将其提交到数据库。它还进行验证检查,以查看电子邮件在数据库中是否唯一。如果它不是唯一的,则会引发一个错误,说明此电子邮件已注册。但是,当出现错误时,对于重复的电子邮件,它会在输入字段旁边显示一个丑陋的项目符号列表,其中包含该电子邮件已注册的文本。我正在尝试将其样式设置为在输入文本下显示一个带有黄色I图标的小对话框,就像输入不包含@符号时一样,即它不是电子邮
<form class="form-inline" method="post">
<div class="input-group input-group-newsletter">
<div class="form-group">
{% csrf_token %}
{{ form }}
</div>
<div class="form-group">
<div class="input-group-append">
<button class="btn btn-secondary" type="submit">Button Text</button>
</div>
</div>
</div>
</form>
forms.py
from django import forms
from .models import AppModel
class AppForm(forms.ModelForm):
email = forms.EmailField(required=True,
label='',
widget=forms.EmailInput(attrs={'class': 'form-control',
'placeholder': 'Enter email...',
'name': 'email',
'aria-label': 'Enter email...',
'aria-describedby': 'basic-addon'}))
class Meta:
model = AppModel
fields = ('email',)
def clean_email(self, *args, **kwargs):
email = self.cleaned_data.get("email")
if AppModel.objects.filter(email__iexact=email).exists():
raise forms.ValidationError("This email is already registered.")
return email
您可能需要尝试Django消息框架。这个网站展示了它是如何完成的。我自己也试过,效果很好,不过我还没有试过在里面放图标 根据以下评论进行更新: 以下是我的项目中的代码片段 在settings.py中 messages.html模板,可以包含在任何要进行通知的模板中
{% if messages %}
{% for message in messages %}
<div class="alert {{ message.tags }} alert-dismissible " role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
{{ message }}
</div>
{% endfor %}
{% endif %}
这是Django处理错误的形式。检查。问题不是错误没有显示。问题是,该错误没有像处理其他错误一样使用twitter引导创建警报。虽然这在理论上可以回答问题,但在此处包含答案的基本部分,并提供链接以供参考。@Selcuk更新了我的答案,但他不知道存在上述指南。
from django.contrib.messages import constants as messages
...
MESSAGE_TAGS = {
messages.DEBUG: 'alert-info',
messages.INFO: 'alert-info',
messages.SUCCESS: 'alert-success',
messages.WARNING: 'alert-warning',
messages.ERROR: 'alert-danger',
}
{% if messages %}
{% for message in messages %}
<div class="alert {{ message.tags }} alert-dismissible " role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
{{ message }}
</div>
{% endfor %}
{% endif %}
<body>
{% include 'trip_monitor/messages.html' %}
<div class="login-form">
<form method="post">
{% csrf_token %}
<h2 class="text-center">Materials Management</h2>
<p align="center">Please <strong>log in</strong> to continue.</p>
<div class="form-group">
<input name="username" type="text" class="form-control" placeholder="Username" required="required" autofocus>
</div>
<div class="form-group">
<input name="password" type="password" class="form-control" placeholder="Password" required="required" id="password">
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary btn-block">Log in</button>
</div>
</form>
</div>
</body>
from django.contrib import messages
def login(request):
if request.method == 'POST':
_username = request.POST['username']
_password = request.POST['password']
user = authenticate(request, username=_username, password=_password)
if user is not None:
auth_login(request, user)
return redirect('/trip/')
else:
messages.error(request, 'Username or Password is incorrect!') # this will be shown as pop-up message
return render(request, 'trip_monitor/login.html')
elif request.method == 'GET':
if request.user.is_authenticated:
return redirect('/trip/')
else:
return render(request, 'trip_monitor/login.html')