2012-11-23 51 views
5

我正在为我的项目使用django注册。在我的registration_form.html文件中:如何将占位符添加到Django注册形式

{{form.username}} 
{{form.email}} 
//other fields 

我想为每个字段设置占位符。但是这是一种内置的应用程序。所以我需要找到从我的主应用程序编辑这些领域的方式。

我不想更改Django注册的来源。

+0

您是否为此定义了自定义django表单或使用内置表单? – arulmr

+0

我正在使用内置的[forms](http://docs.b-list.org/django-registration/0.8/forms.html?highlight=registration%20form#registration.forms.RegistrationFormUniqueEmail) – alix

+0

这很好吗?你,使用jQuery添加占位符到字段? – arulmr

回答

20

如果你可以覆盖内置的形式,你可以定义占位符如下:

class RegistrationForm(forms.ModelForm): 
    class Meta: 
     model = YourModelName 
     widgets = { 
      'username' : forms.TextInput(attrs = {'placeholder': 'Username'}), 
      'email' : forms.TextInput(attrs = {'placeholder': 'E-Mail'}), 
     } 

否则您可以使用使用jQuery占位符添加到字段下面给出的相应字段的id

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 
<script type="text/javascript" > 
    $(document).ready(function(){ 
     $("#id_username").attr('placeholder', '{{form.username.label}}'); 
     $("#id_email").attr('placeholder', '{{form.email.label}}'); 
    }); 
</script> 

您可以使用firebug发现场的id

+0

谢谢。有效。 – alix

+0

乐意帮忙:) – arulmr

+0

您可以编辑答案,添加“如何覆盖内置表单”吗?例如,我创建了一个目录“accounts”,我创建了一个名为“forms.py”的模块,但是这个应该从urls.py中调用? – realnot

11

我实际上会创建一个模板标记过滤器来修改字段。

@register.filter 
def html_placeholder(field, args=None): 
    if args == None: 
     return field 
    field.field.widget.attrs.update({ "placeholder": args }) 
    return field 
+1

https://docs.djangoproject.com/en/dev/howto/custom-template-tags/ – max4ever

1

另一种方法,这对于django.contrib.auth.AuthenticationForm(我认为应该在你的情况以及工作)的工作原理是在渲染视图注入这一信息。这样你就不需要将它嵌入到你的表单类中,也不需要强制jquery。

def index(request): 
    form = AuthenticationForm(request) 
    form.fields['username'].widget.attrs.update({ 
      'placeholder': 'Name' 
     }) 
    form.fields['password'].widget.attrs.update({ 
      'placeholder': 'Password' 
     }) 

    context = RequestContext(request, { 
     'form' : form, 
    }) 
    return HttpResponse(template.render(context))