hi there,when learning flask,i have confronted a question,which is "BuildError : Could not build url for endpoint 'login'. Did you mean 'index' instead?",my code is below.
html file is below
Code:
__author__ = 'Administrator'
from app import app,db,lm,oid
from flask import render_template,flash,redirect,session,url_for,request,g
from flask.ext.login import login_user,logout_user,current_user,login_required
from models import User
from form import LoginForm#,EditForm
from datetime import datetime
@app.route('/')
@app.route('/index')
@login_required
def index():
user = g.user
#user = { 'nickname': 'Miguel' } # fake user
posts = [ # fake array of posts
{
'author': { 'nickname': 'John' },
'body': 'Beautiful day in Portland!'
},
{
'author': { 'nickname': 'Susan' },
'body': 'The Avengers movie was so cool!'
}
]
return render_template("index.html",
title = 'Home',
user = user,
posts = posts)
@lm.user_loader
def load_user(id):
return User.query.get(int(id))
@app.route('/login',methods=['GET','POST'])
@app.before_request
def before_request():
g.user = current_user
def login():
if g.user is not None and g.user.is_authenticated:
return redirect(url_for('index'))
form = LoginForm()
print form.openid.data
if form.validate_on_submit():
session['remember_me'] = form.remember_me.data
a= User.query.get(2).nickname
print 'dataall '+str(a)
user = User.query.filter_by(nickname=form.openid.data).first()
print 'query result ' + str(user)
if user :
print 'user start'
login_user(user)
return redirect( url_for('index'))
print 'user done'
return render_template('login.html',title = 'Sign In',form = form,providers = app.config['OPENID_PROVIDERS'])
@app.route('/user/<nickname>')
@login_required
def user(nickname):
user = User.query.filter_by(nickname = nickname).first()
if user == None:
flash('User' + nickname +"not found.")
return redirect(url_for('index'))
posts = [
{'author':'user','body':'Test post #1'},
{'author':'user','body':'Test post #2'}
]
return render_template('user.html',user=user,posts =posts)
Code:
<html> <head>
{% if title %}
<title>{{title}} - microblog</title>
{% else %}
<title>microblog</title>
{% endif %}
</head> <body> <div>Microblog:
<a href="{{ url_for('index') }}">Home</a> <a href="{{ url_for('user', nickname = g.user.nickname) }}">Your Profile</a> <a href="{{ url_for('logout') }}">Logout</a> </div> <hr>
{% with messages = get_flashed_messages() %}
{% if messages %}
<ul>
{% for messages in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}
{% block content %}{% endblock %}
</body> </html>