Django 从模板传递值到视图

0 投票
1 回答
1487 浏览
提问于 2025-04-17 23:46

我在把模板里的值传递到视图时遇到了麻烦。简单来说,我创建了一个用户注册的表单,想把模板里的值传到视图,这样我就可以构建一个用户对象,添加到我的数据库里。但是当我在输入框中加上 name={{user_form.username}} 时,似乎我的“输入”没有正常工作。此外,我还想在选择“借款人”、“图书管理员”和“职员”时分别传递值0、1、2,我该怎么做才能实现这个呢?

下面是我的代码。

      <form id="user_form" method="post" action="/sign_up/" class="form-signin" role="form">
          {% csrf_token %}
        <h2 class="form-signin-heading">Signup </h2>

            {% if error%}

        <div class="error"> Your registration has been unsuccessfull </div> 
        {% endif %}

        <input type="text" class="form-control" name="username" value="{{user_form.username}}" placeholder="Username" required autofocus>
        <input type="password" class="form-control" name="password1" placeholder="Password" value="" required>
        <input type="password" class="form-control" name="password2" placeholder="Retype password" value="" required>       


        <select class="form-control">
  <option value="2">Librarian</option>
  <option value="0">Borrower</option>
  <option value="1">Clerk</option>
</select>

        <button class="btn btn-lg btn-primary btn-block" type="submit">Sign Up</button>

      </form>

forms.py 文件中

class UserForm(forms.Form):
    username = forms.CharField(max_length=30)
    password1 = forms.CharField(widget=forms.PasswordInput())
    password2 = forms.CharField(widget=forms.PasswordInput())

views.py 文件中

   def sign_up(request):
    registered = False;
    error = False;
    if request.method == 'POST':
        user_form = UserForm(request.POST)
        if user_form.is_valid():
            registered = True
            username = user_form.cleaned_data['username']
            password = user_form.cleaned_data['password']
            user = User.objects.create_user(username, None, password)
            user.save()
        else:
            error = True;
    else:
        user_form = UserForm()

    return render(request, 'books/sign_up.html',
                  {'user_form':user_form,
                   'registered':registered, 'error':error})

1 个回答

1

下面的表单应该可以正常工作。

<form id="user_form" method="post" action="/sign_up/" class="form-signin" role="form">
    {% csrf_token %}
    <h2 class="form-signin-heading">Signup </h2>
    <input type="text" class="form-control" name="username"  value="{{user_form.username}}" placeholder="Username" required autofocus>
    <input type="password" class="form-control" name="password1" placeholder="Password" required>
    <input type="password" class="form-control" name="password2" placeholder="Retype password" required>      
    <select class="form-control">
        <option value="1">Librarian</option>
        <option value="0">Borrower</option>
        <option value="2">Clerk</option>
    </select>
    <button class="btn btn-lg btn-primary btn-block" type="submit">Sign Up</button>
</form>

我做的修改有:

  1. 更改了用户名和密码输入框的名称
  2. 更改了用户名输入框的类型
  3. 在下拉选择框中添加了值属性

撰写回答