2016-07-20 6 views
0

私はユーザーログインを作成しようとしています。Django - '関数'オブジェクトが反復可能ではありません - テンプレートレンダリング中にエラーが発生しました

Exception Type: TypeError 
Exception Value: 'function' object is not iterable 

ここで完全なトレースバックがあります:私は私のログインフォームに送信する]をクリックすると、私はこのエラーを取得する私が正しくトレースバックを読んでいる場合http://dpaste.com/3D1B7MG

ので、問題は{%です"base.html"%} all_poss.htmlの行を拡張します。だから、問題は実際にbase.htmlの中にあるのでしょうか?またはall_postsを制御するビューで

マイall_posts.html

{% extends "base.html" %} 
{% load staticfiles %} 

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <style></style> 
<title></title> 
</head> 
<body> 
</body> 
</html> 

base.html

{% load staticfiles %} 
{% load crispy_forms_tags %} 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
    "http://www.w3.org/TR/html4/strict.dtd"> 
<HTML> 
    <HEAD> 
     <link rel="stylesheet"  href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"> 
     <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"> 
     <link rel="stylesheet" href="{% static 'css/base.css' %}"> 
     <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
     <link href="assets/css/bootstrap-responsive.css" rel="stylesheet"> 
     <TITLE>{% block title %}{% endblock %}</TITLE> 

</HEAD> 

    <BODY> 
    {% block content %} 
    <div class="navbar-wrapper"> 
    <div class="post_button" style="width:58px; margin:0 auto;"> 
    <a href="#" class="btn btn-custom blue">Submit a Post</a> 
    </div> <!-- /.post_button--> 
    <div class="log_bar"> 
    <ul> 
     {% if user.is_authenticated %} 
      <li>Welcome,</li> 
      <li><a href="{% url 'profile' %}">{{ user.username }}</a></li> 
      <li>|</li> 
      <li><a href="{% url 'logout' %}">Log Out</a></li> 
     {% else %} 
      <li>Please</li> 
      <li><a data-toggle="modal" data-target="#modal-login" href="">log in</a></li> 
      <li>or</li> 
      <li><a data-toggle="modal" data-target="#modal-register" href="">sign up</a></li> 
     {% endif %} 
    </ul> 
    </div><!-- /.log_bar --> 
<nav class="navbar navbar-fixed-left navbar-static-top"> 
    <div class="container-fluid"> 
    <!-- Collect the nav links, forms, and other content for toggling --> 
     <ul class="nav navbar-nav "> 
     <li class="active"><a href="/">Home <span class="sr-only">(current)</span></a></li> 
     <li><a href="">All</a></li> 
     <li><a href="">New</a></li 
     <li class="dropdown"> 
      <a href="" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Top<span class="caret"></span></a> 
      <ul class="dropdown-menu"> 
      <li><a href="">hour</a></li> 
      <li><a href="">24 hrs</a></li> 
      <li><a href="">week</a></li> 
      <li><a href="">month</a></li> 
      <li><a href="">year</a></li> 
      <li><a href="">beginning of time</a></li> 
      <li role="separator" class="divider"></li> 
      <li><a href="">Custom Search</a></li> 
      </ul> 
     </li> 
     </ul> 
    </div><!-- /.container-fluid --> 
</nav> 
<div id="side_bar"> 
    <form class="navbar-form navbar-static-top navbar-right" role="search" id="navBarSearchForm"> 
       <div class="input-group"> 
        <input type="text" class="form-control" placeholder="Search"> 
        <span class="input-group-btn"> 
         <button type="submit" class="btn btn-default" id="search_btn"> 
         <span class="glyphicon glyphicon-search"></span> 
         </button> 
        </span> 
      </div> 
      </form> 
    </div><!-- /.side-bar --> 
    <button class="btn-block" id='hideshow' value='hide/show' style="display: block; height: 100%;"></button> 

    {% include 'register.html' %} 
    {% include 'login.html' %} 

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"> </script> 
    <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"> </script> 
    <script type="text/javascript" src="{{ STATIC_URL }} /static/jquery.js"></script> 
    <script type="text/javascript" src="{{ STATIC_URL }} /static/jquery.leanModal.js"></script> 

{% endblock %} 
    </BODY> 
</HTML> 

views.py

def login(request): 
    """ 
    Log in view 
    """ 
    if request.method == 'POST': 
     form = AuthenticationForm(data=request.POST) 
     if form.is_valid(): 
      user = authenticate(username=request.POST['username'], password=request.POST['password']) 
      if user is not None: 
       if user.is_active: 
        django_login(request, user) 
        return render(request, 'all_posts.html', {'user': request.user}) 
    else: 
     form = AuthenticationForm() 
    return render_to_response('login.html', { 
     'authenticationform': form, 
    }, context_instance=RequestContext(request)) 


def all_posts(request): 
    post_list = TextPost.objects.all().order_by('-score')) 
    paginator = Paginator(post_list, 100) # Show 100 contacts per page 
    registrationform = RegistrationForm(request.POST or None) 
    authenticationform = AuthenticationForm(request.POST or None) 

    page = request.GET.get('page') 

    try: 
     posts = paginator.page(page) 
    except PageNotAnInteger: 
     # If page is not an integer, deliver first page. 
     posts = paginator.page(1) 
    except EmptyPage: 
     # If page is out of range (e.g. 9999), deliver last page of results. 
     posts = paginator.page(paginator.num_pages) 

    return render(request, 'all_posts.html', {'posts': posts,  'registrationform': registrationform, 'authenticationform': authenticationform, 'user': request.user}) 

編集1:login.htmlと login.htmlとし、register.html 1つはログインフォームであり、もう1つは登録フォームです。

{% load staticfiles %} 
{% load crispy_forms_tags %} 

<div class="modal" id="modal-login"> 
     <div class="modal-dialog"> 
      <div class="modal-content"> 
       <form enctype="multipart/form-data" method="post" action="login/"> 
        <div class="modal-header"> 
         <button type="button" class="close" data-dismiss="modal">&times;</button> 
         <h3 class="modal-title">Log In</h3> 
        </div> 
        <div class="modal-body"> 
         {% csrf_token %} 
         {{ authenticationform|crispy }} 
        </div> 
        <div class="modal-footer"> 
         <input type='submit' class="btn btn-primary" value="Log In" /> 
        </div> 
       </form> 
      </div> 
     </div> 
</div> 

編集2:

{% load staticfiles %} 
{% load crispy_forms_tags %} 

<div class="modal" id="modal-register"> 
     <div class="modal-dialog"> 
      <div class="modal-content"> 
       <form enctype="multipart/form-data" method="post" action="register/"> 
        <div class="modal-header"> 
         <button type="button" class="close" data-dismiss="modal">&times;</button> 
         <h3 class="modal-title">Register</h3> 
        </div> 
        <div class="modal-body"> 
         {% csrf_token %} 
         {{ registrationform|crispy }} 
        </div> 
        <div class="modal-footer"> 
         <input type='submit' class="btn btn-primary" value="Register" /> 
        </div> 
       </form> 
      </div> 
     </div> 
</div> 
+0

なぜbase.htmlを拡張していますか?あなたはall_postsのベースに何も使っていません。 – e4c5

+0

'register.html'と' login.html'テンプレートと 'urls.py'を表示してください。 –

+0

私はlogin.htmlとregister.htmlを追加しました。基本的に単なるモーダルです。 – ngx311

答えて

0

よしregister.html、私はそれを解決することができました。

問題は、私が持っていた私のbase.htmlに明らかにした:

<li><a href="{% url 'profile' %}">{{ user.username }}</a></li> 

<li><a href="{% url 'logout' %}">Log Out</a></li> 

と私はちょうどのhref = "{%は%}"タグを変更しました"profile /"および"logout /" です。

関連する問題