2017-04-07 13 views
0

ログイン用のタブと新しいユーザーの登録用のタブがあるログイン/登録テンプレート(私はDjangoを使用しています)ページがあります。つまり、1つのテンプレートに2つのフォームがあります。私はさまざまな見解を使ってそれらを処理しています。forms.pyの複数のフォームクラス

私は2クラスを置くforms.pyを作成したのが好きは、次のとおりです。ここで

from django import forms 


class LoginForm(forms.Form): 
    username = forms.CharField(label="Username", max_length=30, widget=forms.TextInput(
     attrs={'name': "username", 
       'id': "username", 
       'tabindex': "2", 
       'class': "form-control", 
       'placeholder': 'Username'})) 
    password = forms.CharField(label="Password", widget=forms.PasswordInput(
     attrs={'name': "password", 
       'id': "password", 
       'tabindex': "2", 
       'class': 'form-control', 
       'placeholder': 'Password'})) 


class RegisterForm(forms.Form): 
    firstNameReg = forms.CharField(label="First Name", max_length=30, widget=forms.TextInput(
     attrs={'name': "firstname", 
       'id': "firstname", 
       'tabindex': "1", 
       'class': "form-control", 
       'placeholder': 'First Name'})) 
    lastNameReg = forms.CharField(label="Last Name", widget=forms.TextInput(
     attrs={'name': "lastname", 
       'id': "lastname", 
       'tabindex': "1", 
       'class': 'form-control', 
       'placeholder': 'Last Name'})) 
    usernameReg = forms.CharField(label="Username", max_length=30, widget=forms.TextInput(
     attrs={'name': "username", 
       'id': "username", 
       'tabindex': "1", 
       'class': "form-control", 
       'placeholder': 'Username'})) 
    emailReg = forms.CharField(label="Email", max_length=30, widget=forms.EmailInput(
     attrs={'name': "username", 
       'id': "username", 
       'tabindex': "1", 
       'class': "form-control", 
       'placeholder': 'Email'})) 
    emailRegConfirm = forms.CharField(label="Email", max_length=30, widget=forms.EmailInput(
     attrs={'name': "username", 
       'id': "username", 
       'tabindex': "1", 
       'class': "form-control", 
       'placeholder': 'Confirm Email'})) 
    passwordReg = forms.CharField(label="Password", widget=forms.PasswordInput(
     attrs={'name': "password", 
       'id': "password", 
       'tabindex': "2", 
       'class': 'form-control', 
       'placeholder': 'Password'})) 
    passwordRegConfirm = forms.CharField(label="Password", widget=forms.PasswordInput(
     attrs={'name': "confirm-password", 
       'id': "confirm-password", 
       'tabindex': "2", 
       'class': 'form-control', 
       'placeholder': 'Confirm Email'})) 

は私のテンプレートです:ここでは

{% extends 'game_webstore/base.html' %} 
{% load staticfiles %} 
{% block body %} 


    <link rel="stylesheet" href="{% static "game_webstore/login_css.css" %}"> 
    <script src="{% static "game_webstore/login.js" %}"></script> 
    <div class="container"> 
     <div class="row"> 
      <div class="col-md-6 col-md-offset-3"> 
       <div class="panel panel-login"> 
        <div class="panel-heading"> 
         <div class="row"> 
          <div class="col-xs-6"> 
           <a href="#" class="active" id="login-form-link">Login</a> 
          </div> 
          <div class="col-xs-6"> 
           <a href="#" id="register-form-link">Register</a> 
          </div> 
         </div> 
         <hr> 
        </div> 
        <div class="panel-body"> 
         <div class="row"> 
          <div class="col-lg-12"> 
           <form id="login-form" action="" method="post" role="form" style="display: block;"> 
            {% csrf_token %} 
            {% if error %} 
             <p style="color: red"><strong>* Wrong Username or Password.</strong></p> 
            {% endif %} 
            <div class="form-group"> 
             {{ form.username.errors }} 
             {{ form.username }} 
            </div> 
            <div class="form-group"> 
             {{ form.password.errors }} 
             {{ form.password }} 
            </div> 
            <div class="form-group"> 
             <div class="row"> 
              <div class="col-sm-6 col-sm-offset-3"> 
               <input type="submit" name="login-submit" id="login-submit" tabindex="4" class="form-control btn btn-login" value="Log In"> 
              </div> 
             </div> 
            </div> 
            <div class="form-group"> 
             <div class="row"> 
              <div class="col-lg-12"> 
               <div class="text-center"> 
                <a href="" tabindex="5" class="forgot-password">Forgot Password?</a> 
               </div> 
              </div> 
             </div> 
            </div> 
           </form> 
           <form id="register-form" action="." method="post" role="form" style="display: none;"> 
            {{ form.as_p }} 
            <div class="form-group"> 
             {{ form.firstNameReg.errors }} 
             {{ form.firstNameReg }} 
            </div> 
            <div class="form-group"> 
             {{ form.lastNameReg.errors }} 
             {{ form.lastNameReg }} 
            </div> 
            <div class="form-group"> 
             {{ form.usernameReg.errors }} 
             {{ form.usernameReg }} 
            </div> 
            <div class="form-group"> 
             {{ form.emailReg.errors }} 
             {{ form.emailReg }} 
            </div> 
            <div class="form-group"> 
             {{ form.emailRegConfirm.errors }} 
             {{ form.emailRegConfirm }} 
            </div> 
            <div class="form-group"> 
             {{ form.passwordReg.errors }} 
             {{ form.passwordReg }} 
            </div> 
            <div class="form-group"> 
             {{ form.passwordRegConfirm.errors }} 
             {{ form.passwordRegConfirm }} 
            </div> 
            <div class="form-group"> 
             <div class="row"> 
              <div class="col-sm-6 col-sm-offset-3"> 
               <input type="submit" name="register-submit" id="register-submit" tabindex="4" class="form-control btn btn-register" value="Register Now"> 
              </div> 
             </div> 
            </div> 
           </form> 
          </div> 
         </div> 
        </div> 
       </div> 
      </div> 
     </div> 
    </div> 
{% endblock body %} 

はまだ完了していませんこれは、私の見解である。

def register_view(request): 
    error = False 

    if request.method == "POST": 
     form = RegisterForm(request.POST) 
     if form.is_valid(): 
      user = form.save(False) 
      user.set_password(user.password) 
      user.save() 
      user = authenticate(username=user.username, password=request.POST['password1']) 
      login(request, user) 

      return redirect('/') 

私の問題は、テンプレートでは、最初のクラスのLoginForm(ユーザー名とパスワードd)、他のすべてのフィールドを無視します。この問題に関する提案はありますか?

+0

あなたは両方のフォームクラスを使用していますか?少なくとも、あなたのビューとテンプレートを表示する必要があります。 –

+0

@DanielRosemanテンプレートとビューを追加しました。 – ryuzakinho

+0

実際にテンプレートをレンダリングする部分はどこですか? –

答えて

1

テンプレートをレンダリングするときに2つの異なるコンテキスト名で2つのフォームを渡すようにしてください。

例えば(ビュー):

<div class="form-group"> 
    {{ login_form.username.errors }} 
    {{ login_form.username }} 
</div> 

および:

context = {'login_form': LoginForm(), 'register_form': RegisterForm()} 
return render(request, 'your/template.html', context) 

そしてテンプレートに、それに応じてそれらを使用BTW

<div class="form-group"> 
    {{ register_form.first_name.errors }} 
    {{ register_form.first_name }} 
</div> 

規則をPythonではラクダケースの変数名ではなくアンダースコアを使用するs。したがってfirstNameではなくfirst_nameです。

BTW 2{{ form.as_p }}があり、各フィールドを個別にレンダリングするのは冗長です。 (例えば、{{ form.username }})。いずれかで十分であるはずです。

+0

コンテキストアプローチが機能します。コメントしてくれてありがとう。 – ryuzakinho

関連する問題