首页 > flask布局中出现“端点“用户”与价值[“名称”]无法建立链接”错误

flask布局中出现“端点“用户”与价值[“名称”]无法建立链接”错误

可能图片和代码有点多 望大伙见谅啊

下面是文件结构

app/main/__init__.py

#!/usr/bin/python
# -*- coding:utf-8 -*-
from flask import Blueprint

main=Blueprint('main',__name__)

from . import views,errors

app/main/error.py

from flask import render_template
from . import main

@main.errorhandler(404)
def page_not_found(e):
    return render_template('404.html'), 404

@main.errorhandler(500)
def error(e):
    return render_template('500.html'), 500

app/main/views.py

from flask import render_template, redirect, session, url_for
from .. import db
from ..models import User
from .forms import NameForm
from . import main

@main.route('/', methods=['GET', 'POST'])
def index():
    form = NameForm()
    if form.validate_on_submit():
        user = User.query.filter_by(username=form.name.data).first()
        if user is None:
            user = User(username=form.name.data)
            db.session.add(user)
            session['known'] = False
        else:
            session['known'] = True
        session['name'] = form.name.data
        form.name.data = ''
        return redirect(url_for('index'))
    return render_template('index.html', form=form, name=session.get('name'), known=session.get('known', False))

@main.route('/user/<name>')
def user(name):
    return render_template('user.html', name=name)

@main.route('/request')
def request_test():
    user_agent = request.headers.get('User-Agent')
    return '%s' % user_agent

@main.route('/about')
def about():
    return 'about'

app/main/forms.py

from flask_wtf import Form
from wtforms import StringField, SubmitField
from wtforms.validators import Required

class NameForm(Form):
    name = StringField('what is your name', validators=[Required()])
    submit = SubmitField('Submit')

app/__init__.py

from flask import Flask
from flask_bootstrap import Bootstrap
from flask_sqlalchemy import SQLAlchemy
import os

basedir = os.path.abspath(os.path.dirname(__file__))

bootstrap = Bootstrap()
db = SQLAlchemy()

def create_app(config_name):
    app = Flask(__name__)

    app.config['SECRET_KEY'] = 'hard to guess string'
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////' + os.path.join(basedir, 'data.sqlite')
    app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True


    from .main import main as main_blueprint
    app.register_blueprint(main_blueprint)

    bootstrap.init_app(app)
    db.init_app(app)

    return app

app/models.py

from . import db

class Role(db.Model):
    __tablename__ = 'roles'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)
    users = db.relationship('User', backref='role', lazy='dynamic')

    def __repr__(self):
        return '<Role %r>' % self.name

class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), unique=True, index=True)
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))

    def __repr__(self):
        return '<User %r>' % self.username

config.py

import os
basedir = os.path.abspath(os.path.dirname(__file__))

class Config:
    SECRET_KEY = os.environ.get('SECRET_KEY') or 'hard to guess string'
    SQLALCHEMY_COMMIT_ON_TEARDOWN = True
    MAIL_SERVER = 'smtp.googlemail.com'
    MAIL_PORT = 587
    MAIL_USE_TLS = True
    MAIL_USERNAME = os.environ.get('MAIL_USERNAME')
    MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD')
    FLASKY_MAIL_SUBJECT_PREFIX = '[Flasky]'
    FLASKY_MAIL_SENDER = 'Flasky Admin <flasky@example.com>'
    FLASKY_ADMIN = os.environ.get('FLASKY_ADMIN')

    @staticmethod
    def init_app(app):
        pass

class DevelopmentConfig(Config):
    DEBUG = True
    SQLALCHEMY_DATABASE_URI = os.environ.get('DEV_DATABASE_URL') or \
        'sqlite:///' + os.path.join(basedir, 'data-dev.sqlite')

class TestingConfig(Config):
    TESTING = True
    SQLALCHEMY_DATABASE_URI = os.environ.get('TEST_DATABASE_URL') or \
        'sqlite:///' + os.path.join(basedir, 'data-test.sqlite')

class ProductionConfig(Config):
    SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \
        'sqlite:///' + os.path.join(basedir, 'data.sqlite')

config = {
    'development': DevelopmentConfig,
    'testing': TestingConfig,
    'production': ProductionConfig,
    'default': DevelopmentConfig
}

manage.py

import os
from flask_script import Manager,Shell
from app import create_app
from app.models import User,Role

app = create_app(os.getenv('FLASK_CONFIG' or 'default'))
manager = Manager(app)

@manager.command
def dev():
    from livereload import Server
    live_server = Server(app.wsgi_app)
    live_server.watch('**/*.*')
    live_server.serve(open_url=True)

def make_shell_context():
    return dict(app=app,db=db,User=User,Role=Role)
manager.add_command("shell",Shell(make_context=make_shell_context))

if __name__ == '__main__':
    manager.run()

======

运行之后出现了错误 如下所示

```
Traceback (most recent call last):
File "/Library/Python/2.7/site-packages/tornado/web.py", line 1446, in _execute

result = self.prepare()

File "/Library/Python/2.7/site-packages/tornado/web.py", line 2706, in prepare

self.fallback(self.request)

File "/Library/Python/2.7/site-packages/livereload/server.py", line 113, in call

WSGIContainer.environ(request), start_response)

File "/Library/Python/2.7/site-packages/flask/app.py", line 1991, in wsgi_app

response = self.make_response(self.handle_exception(e))

File "/Library/Python/2.7/site-packages/flask/app.py", line 1574, in handle_exception

return handler(e)

File "/Users/lockeroots/PycharmProjects/flaskr/app/main/errors.py", line 15, in error

return render_template('500.html'), 500

File "/Library/Python/2.7/site-packages/flask/templating.py", line 134, in render_template

context, ctx.app)

File "/Library/Python/2.7/site-packages/flask/templating.py", line 116, in _render

rv = template.render(context)

File "/Library/Python/2.7/site-packages/jinja2/environment.py", line 989, in render

return self.environment.handle_exception(exc_info, True)

File "/Library/Python/2.7/site-packages/jinja2/environment.py", line 754, in handle_exception

reraise(exc_type, exc_value, tb)

File "/Users/lockeroots/PycharmProjects/flaskr/app/templates/500.html", line 1, in top-level template code

{% extends "base.html" %}

File "/Users/lockeroots/PycharmProjects/flaskr/app/templates/base.html", line 1, in top-level template code

{% extends "bootstrap/base.html" %}

File "/Library/Python/2.7/site-packages/flask_bootstrap/templates/bootstrap/base.html", line 1, in top-level template code

{% block doc -%}

File "/Library/Python/2.7/site-packages/flask_bootstrap/templates/bootstrap/base.html", line 4, in block "doc"

{%- block html %}

File "/Library/Python/2.7/site-packages/flask_bootstrap/templates/bootstrap/base.html", line 20, in block "html"

{% block body -%}

File "/Library/Python/2.7/site-packages/flask_bootstrap/templates/bootstrap/base.html", line 21, in block "body"

{% block navbar %}

File "/Users/lockeroots/PycharmProjects/flaskr/app/templates/base.html", line 17, in block "navbar"

<li><a href='{{ url_for('user',name='lockeroots') }}'>Home</a></li>

File "/Library/Python/2.7/site-packages/flask/helpers.py", line 332, in url_for

return appctx.app.handle_url_build_error(error, endpoint, values)

File "/Library/Python/2.7/site-packages/flask/app.py", line 1811, in handle_url_build_error

reraise(exc_type, exc_value, tb)

File "/Library/Python/2.7/site-packages/flask/helpers.py", line 322, in url_for

force_external=external)

File "/Library/Python/2.7/site-packages/werkzeug/routing.py", line 1758, in build

raise BuildError(endpoint, values, method, self)

BuildError: Could not build url for endpoint 'user' with values ['name']. Did you mean 'main.user' instead?
```

打开首页和127.0.1:5500/user/name就会出现上面一样的错误

但打开127.0.1:5500/about就没问题

搞了半天不知道哪出问题了


能不能不要直译(╯‵□′)╯︵┴─┴!!!


看提示嘛

url_for('main.user', name=xxx)
【热门文章】
【热门文章】