Django将字段表示为模板变量

时间:2017-12-23 21:36:47

标签: django forms templates

主要问题是,是否可以以任何流畅的方式在html模板中的不同给定位置指定特定表单字段。例如{{form.password}}但是,这似乎不起作用。 (我发誓我已经在某个地方见过这个,但我再也无法在互联网上找到它了)

我注册新用户的观点是继承自UserCreationForm,看起来像这样:

views.py

def signup(request):
if request.method == "POST":
    form = UserCreationForm(request.POST)
    if form.is_valid():
        form.save()
        username = form.cleaned_data.get('username')
        raw_password = form.cleaned_data.get('password1')
        user = authenticate(username=username, password=raw_password)
        login(request, user)
        return redirect('home')

else:
    form = UserCreationForm()
return render(request, 'core/authentication/registration_form.html', {'form': form})

它将此表单直接发送到模板registration_form.html,这就是我希望它的工作方式:

<form class="form" method="POST" action="">
    <div class="card-body">
        <div class="input-group form-group-no-border">
            <span class="input-group-addon">
                <i class="now-ui-icons users_circle-08"></i>
            </span>
            {{ form.first_name }}
       </div>
    </div>

它实际上是如何运作的(现在):

<form class="form" method="POST" action="">
    <div class="card-body">
        <div class="input-group form-group-no-border">
            <span class="input-group-addon">
                <i class="now-ui-icons users_circle-08"></i>
            </span>
            <input type="text" class="form-control" placeholder="First Name...">
       </div>
    </div>

这可能是个愚蠢的问题,但我很好奇。

提前谢谢

1 个答案:

答案 0 :(得分:3)

如果我正确理解了你的问题,这就是django说你应该手动渲染django表单字段的方法。

{{ form.non_field_errors }}  # here django renders errors which do not belong to any field
<div>
    {{ form.field_1.errors }}  # here django renders errors which belong to field_1
    {{ form.field_1.label_tag }}  # label element
    {{ form.field_1 }}  # input element
</div>

# some html

<div>
    {{ form.field_2.errors }}
    {{ form.field_2.label_tag }}
    {{ form.field_2}}
</div>

您可以在下半部分阅读此here

可以使用自定义类和小部件呈现每个字段(每个标签,输入,错误元素)。