7

我正在为我的项目使用 django-registration。在我的registration_form.html文件中:

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

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

我不想更改 django-registration 的来源。

4

3 回答 3

25

如果您可以覆盖内置表单,则可以按如下方式定义占位符:

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该字段。

于 2012-11-23T06:49:04.367 回答
12

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

@register.filter
def html_placeholder(field, args=None):
    if args == None:
        return field
    field.field.widget.attrs.update({ "placeholder": args })
    return field
于 2013-09-06T00:47:21.133 回答
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))
于 2015-02-06T20:36:42.527 回答