【发布时间】:2015-07-10 20:46:24
【问题描述】:
如标题中所述,表单小部件中的占位符属性无法正确显示。它是随机的,有时效果很好,有时我需要刷新浏览器才能显示。 我需要它们,因为我没有在模板中显示字段标签。 无论如何这里是代码:
#FORMS.PY
class RegistrationForm(UserCreationForm):
first_name = forms.CharField(label=_('First name'), max_length=30)
last_name = forms.CharField(label=_('Last name'), max_length=30)
email = forms.EmailField(label=_("Email"), required=True)
class Meta:
model = User
fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2')
def __init__(self, *args, **kwargs):
super(RegistrationForm, self).__init__(*args, **kwargs)
# Set field Label as Placeholder for every field
for field in self.base_fields.values():
field.widget.attrs["placeholder"] = field.label
# Set HTML and CSS attributes to the fields
self.fields['username'].widget.attrs.update({'class':TEXTINPUT_CSS})
self.fields['email'].widget.attrs.update({'class':EMAILINPUT_CSS})
self.fields['password1'].widget.attrs.update({'class':PASSWORDINPUT_CSS})
...
顺便说一句,我正在使用 django 开发服务器,问题可能来自服务器速度慢的事实。 任何帮助将不胜感激
编辑:根据要求修改 Views.py 和模板
#views.py
def register(request):
if request.method == 'POST':
form = RegistrationForm(request.POST)
if form.is_valid():
form.save()
if REGISTER_EMAIL_CONFIRMATION == True:
# Add email confirmation
username = form.cleaned_data['username']
email = form.cleaned_data['email']
salt = hashlib.sha1(str(random.random()).encode('utf-8')).hexdigest()[:5]
activation_key = hashlib.sha1((salt+email).encode('utf-8')).hexdigest()
key_expires = datetime.datetime.today() + datetime.timedelta(CONFIRMATION_KEY_EXPIRE_DAYS)
# Create and save User Profile
user=User.objects.get(username=username)
new_profile = UserProfile(user=user, activation_key=activation_key, key_expires=key_expires)
new_profile.save()
# Send email with activation key
subject_file = 'app_authentication/email_signup_confirm_subject.txt'
body_file = 'app_authentication/email_signup_confirm_body.html'
context = {'username':username, 'activation_key':activation_key}
send_email_from_files([email], subject_file, body_file, context)
return redirect('confirm_email_sent')
else:
return redirect('register_success')
else:
form = RegistrationForm()
return render(request, 'registration/register.html', {'form': form, 'title': _('Register')})
#register.html
{% block content2 %}
<form id="register_form" autocomplete="off" method="post" action="{% url 'register' %}">
{% csrf_token %}
<div class="clearfix">
{% for field in form %}
<div class="form-group">
{{ field }}
{% if form.errors %}
{% for error in field.errors %}
<div class="alert alert-error">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endif %}
</div>
{% endfor %}
{% if form.errors %}
{% for error in form.non_field_errors %}
<div class="alert alert-error">
<strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endif %}
</div>
<!-- Send Button -->
<div class="pt-10">
<button class="submit_btn btn btn-mod btn-medium btn-round btn-full" id="reg-btn" name="submit">{{ title }}</button>
</div>
</form>
{% endblock content2 %}
截图:
当我启动开发服务器并尝试登录时:
刷新浏览器后,登录页面相同:
@akarilimano:
class LoginForm(AuthenticationForm):
# username doesn't have label in AuthenticationForm
username = forms.CharField(label=_("Username"), max_length=254)
def __init__(self, *args, **kwargs):
super(LoginForm, self).__init__(*args, **kwargs)
# Set field Label as Placeholder for every field
for field in self.base_fields.values():
print(field.label)
field.widget.attrs['placeholder'] = field.label
【问题讨论】:
-
占位符的输出是什么?到目前为止,这看起来应该可以工作。
-
我得到了预期的结果(标签用作占位符),但我只得到了 10 次中的 7 次。当它不起作用时,我得到空白表单字段(没有占位符)。我在登录表单中也遇到了同样的问题,代码相同。
-
@khalilan 这些是登录页面的屏幕,注册页面有同样的问题吗?能否提供登录代码(表单、视图)?
-
@akarilimano :我在两种形式中都有同样的问题。我使用默认的 django 视图和表单进行登录,并在 init 中为占位符添加相同的代码(请检查第一篇文章)
标签: python django forms placeholder