2017-12-05 3 views
2

Ich bin neu in Django-Formulare und beim Versuch, ein HTML-Formular zu entwerfen, stelle ich fest, dass die Django-Formularblöcke nicht angezeigt werden. Im Folgenden sind die Codes:Django-Formular wird nicht angezeigt

<body> Tag von index.html:

<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"> 
          {% block login_content %} 
          {% endblock %} 
          {% block register_content %} 
          {% endblock %} 
         </div> 
        </div> 
       </div> 
      </div> 
     </div> 
    </div> 
</div> 

login.html, die in die {% block login_content %}

{% extends 'index.html' %} 
{% block login_content %} 
<form id="login-form" action="{% url 'authentication:user_login' %}" role="form" style="display: block;" method="POST"> 
    {% csrf_token %} 
    <label for="username">Username:</label> 
    <input id="username" type="text" name="username" placeholder="Enter Username" tabindex="1" class="form-control"> 

    <label for="password">Password:</label> 
    <input id="password" type="password" name="password" tabindex="=2" class="form-control" placeholder="Password"> 

    <button type="submit" class="btn btn-success">Login</button> 

</form> 
{% endblock %} 

register.html, das geht in die {% block register_content %}

{% extends 'index.html' %} 
{% block register_content %} 
    <form id="register-form" role="form" style="display: none;" enctype="multipart/form-data" method="POST"> 
     {% csrf_token %} 
     {{ user_form.as_p }} 
     {{ profile_form.as_p }} 
     <input type="submit" name="" value="Register"> 
    </form> 
{% endblock %} 

Auf geht meine UI, die {{ user_form.as_p }} und die {{ profile_form.as_p }} erscheint überhaupt nicht.

Wenn ich die Konsole meiner UI überprüfen, wird das HTML nicht einmal die folgende Zeile aus dem register.html abholen:

<form id="register-form" role="form" style="display: none;" enctype="multipart/form-data" method="POST"> 

Hier ist die login.js, die für die UI Interaktivität verantwortlich ist:

$(function() { 

    $('#login-form-link').click(function(e) { 
     $("#login-form").delay(100).fadeIn(100); 
     $("#register-form").fadeOut(100); 
     $('#register-form-link').removeClass('active'); 
     $(this).addClass('active'); 
     e.preventDefault(); 
    }); 
    $('#register-form-link').click(function(e) { 
     $("#register-form").delay(100).fadeIn(100); 
     $("#login-form").fadeOut(100); 
     $('#login-form-link').removeClass('active'); 
     $(this).addClass('active'); 
     e.preventDefault(); 
    }); 

}); 

EDIT: Hier ist meine views.py:

def user_login(request): 
    if request.method == "POST": 
     username = request.POST.get('username') 
     password = request.POST.get('password') 

     user = authenticate(username=username, password=password) 

     if user: 
      if user.is_active: 
       login(request, user) 
       return HttpResponseRedirect(reverse('homepage')) # main page if login is successful 

      else: 
       return HttpResponse("ACCOUNT NOT ACTIVE") 

     else: 
      print('Someone tried to log in and failed') 
      print('Username: {}, password, {}'.format(username, password)) 
      return HttpResponse('Invalid login details supplied') 

    else: 
     return render(request, 'authentication/login.html', {}) 

def register(request): 
    registered = False 

    if request.method == "POST": 
     user_form = UserForm(data=request.POST) 
     profile_form = UserProfileInfoForm(data=request.POST) 

     if user_form.is_valid() and profile_form.is_valid(): 

      user = user_form.save() 
      user.set_password(user.password) 
      user.save() 

      profile = profile_form.save(commit=False) 
      profile.user = user 

      if 'profile_pic' in request.FILES: 
       profile.profile_pic = request.FILES['profile_pic'] 

      profile.save() 

      registered = True 

     else: 
      print(user_form.errors, profile_form.errors) 

    else: 
     user_form = UserForm() 
     profile_form = UserProfileInfoForm() 

    return render(request, 'authentication/register.html', 
        { 
         'user_form': user_form, 
         'profile_form': profile_form, 
         'registered': registered 
        }) 

Okay, es scheint, als ob es unmöglich ist, eine einzige Seite beide Vorlagen anzuzeigen. Gibt es trotzdem etwas zu erledigen?

+0

Sie sollten Ihre Sicht zeigen. Welche Vorlage rendern Sie eigentlich? Sie können nicht zwei Vorlagen von einer einzelnen Basis erben und erwarten, dass beide angezeigt werden. –

+0

@DanielRoseman Ich versuche, die index.html zu rendern. Gibt es eine Möglichkeit, das Registrierungsformular und das Anmeldeformular auf einer einzigen Seite anzuzeigen? – AKJ

+0

können Sie die Ansichten veröffentlichen? von wo Sie das Formular an die Vorlage senden – Exprator

Antwort

2

In Ihrem register.html,

<form id="register-form" role="form" style="display: none;" enctype="multipart/form-data" method="POST"> 

Sie style="display: none;" einstellen, so offensichtlich wird das Formular nicht auf.

EDIT: Ich bin mir nicht sicher über die Möglichkeit, zwei verschiedene Formen auf der gleichen Seite zu zeigen.

+0

Ich habe das auch versucht, es zeigt sich nicht. Daniel hat in meinem ersten Beitrag bereits erwähnt, dass eine Ansicht leider nicht zwei verschiedene Vorlagen darstellen kann. – AKJ