2013-10-21 14 views
6

tanımsız ve dizin sayfası artık yüklenmemesi neden çözemiyorum. İşteFlask Mega Eğitimi - jinja2.exceptions.UndefinedError: 'form' Ben Miguel Grinberg en Flask Mega Eğitimi aracılığıyla çalışıyorum

File "/home/asdoylejr/microblog/flask/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__ 
return self.wsgi_app(environ, start_response) 

File "/home/asdoylejr/microblog/flask/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app 
response = self.make_response(self.handle_exception(e)) 

File "/home/asdoylejr/microblog/flask/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception 
reraise(exc_type, exc_value, tb) 

File "/home/asdoylejr/microblog/flask/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app 
response = self.full_dispatch_request() 

File "/home/asdoylejr/microblog/flask/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request 
rv = self.handle_user_exception(e) 

File "/home/asdoylejr/microblog/flask/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception 
reraise(exc_type, exc_value, tb) 

File "/home/asdoylejr/microblog/flask/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request 
rv = self.dispatch_request() 

File "/home/asdoylejr/microblog/flask/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request 
return self.view_functions[rule.endpoint](**req.view_args) 

File "/home/asdoylejr/microblog/flask/lib/python2.7/site-packages/flask_login.py", line 658, in decorated_view 
return func(*args, **kwargs) 

File "/home/asdoylejr/microblog/app/views.py", line 44, in index 
posts = posts) 

File "/home/asdoylejr/microblog/flask/lib/python2.7/site-packages/flask/templating.py", line 128, in render_template 
context, ctx.app) 

File "/home/asdoylejr/microblog/flask/lib/python2.7/site-packages/flask/templating.py", line 110, in _render 
rv = template.render(context) 

File "/home/asdoylejr/microblog/flask/lib/python2.7/site-packages/jinja2/environment.py", line 969, in render 
return self.environment.handle_exception(exc_info, True) 

File "/home/asdoylejr/microblog/flask/lib/python2.7/site-packages/jinja2/environment.py", line 742, in handle_exception 
reraise(exc_type, exc_value, tb) 

File "/home/asdoylejr/microblog/app/templates/index.html", line 2, in top-level template code 
{% extends "base.html" %} 

File "/home/asdoylejr/microblog/app/templates/base.html", line 30, in top-level template code 
{% block content %}{% endblock %} 

File "/home/asdoylejr/microblog/app/templates/index.html", line 7, in block "content" 
{{form.hidden_tag()}} 

File "/home/asdoylejr/microblog/flask/lib/python2.7/site-packages/jinja2/environment.py", line 397, in getattr 
return getattr(obj, attribute) 

UndefinedError: 'form' is undefined 

söz konusu indeks sayfası için kod edilir: Burada

<!-- extend base layout --> 
{% extends "base.html" %} 

{% block content %} 
<h1>Hi, {{g.user.nickname}}!</h1> 
<form action="" method="post" name="post"> 
    {{form.hidden_tag()}} 
<table> 
    <tr> 
     <td>Say something:</td> 
     <td>{{form.post(size = 30, maxlength = 140)}}</td> 
     <td> 
     {% for error in form.errors.post %} 
     <span style="color: red;">[{{error}}]</span><br> 
     {% endfor %} 
     </td> 
    </tr> 
    <tr> 
     <td></td> 
     <td><input type="submit" value="Post!"></td> 
     <td></td> 
    </tr> 
</table> 
</form> 
{% for post in posts %} 
<p> 
    {{post.author.nickname}} says: <b>{{post.body}}</b> 
</p> 
{% endfor %} 
{% endblock %} 

Ve görünümünde kod edilir:

@app.route('/', methods = ['GET', 'POST']) 
@app.route('/index', methods = ['GET', 'POST']) 
@login_required 
def index(): 
    form = PostForm() 
    if form.validate_on_submit(): 
     post = Post(body = form.post.data, timestamp = datetime.utcnow(), author = g.user) 
     db.session.add(post) 
     db.session.commit() 
     flash('Your post is now live!') 
     return redirect(url_for('index')) 
    posts = g.user.followed_posts().all() 
    return render_template("index.html", 
     title = 'Home', 
     user = user, 
     posts = posts) 

okudum İşte traceback olduğunu eğitim, birden zamanlarda ve o her ders sonunda bırakır kaynağına kodumu karşılaştırıldığında, ve bunun neden çalışmadığını hiçbir fikrim yok. o başka görünümde formları geçen bir hata döndürmez, bu görünümde formu geçirerek sorun yaşıyor neden emin değilim.

Beni doğru yöne yönlendiren var mı?

cevap

6

Sen bağlam değişken olarak form geçmelidir. Bunu dene:

@app.route('/', methods = ['GET', 'POST']) 
@app.route('/index', methods = ['GET', 'POST']) 
@login_required 
def index(): 
    form = PostForm() 
    if form.validate_on_submit(): 
     post = Post(body = form.post.data, timestamp = datetime.utcnow(), author = g.user) 
     db.session.add(post) 
     db.session.commit() 
     flash('Your post is now live!') 
     return redirect(url_for('index')) 
    posts = g.user.followed_posts().all() 
    return render_template("index.html", 
     title = 'Home', 
     user = user, 
     posts = posts, 
     form = form) 
+0

EVET. Bu yaptı. Teşekkür ederim! – asdoylejr

16

Aldığınız hata iletisi yığın izlemede açıklanmıştır. Özellikle, burada:

File "/home/asdoylejr/microblog/app/templates/index.html", line 7, in block "content" 
{{form.hidden_tag()}} 

File "/home/asdoylejr/microblog/flask/lib/python2.7/site-packages/jinja2/environment.py", line 397, in getattr 
return getattr(obj, attribute) 

UndefinedError: 'form' is undefined 

hata mesajı form tanımsız olduğunu söylüyor Jinja, geliyor. Şablon ... form kullanmak

... 
{% block content %} 
<h1>Hi, {{g.user.nickname}}!</h1> 
<form action="" method="post" name="post"> 
    {{form.hidden_tag()}} 
<table> 
    ... 

çalışıyor ... ama sen ... (sadece title, user ve posts tanımladığınız) sizin render_template yönteminin bir parçası olarak geçti hiç

return render_template("index.html", 
     title = 'Home', 
     user = user, 
     posts = posts) 
+0

, Çok teşekkür ederim ben fark etmedi inanamıyorum! – asdoylejr