是否url_for可以跨蓝图工作?
/flaskapp
/runserver.py (from server import app; app.run(debug=True))
/server
/__init__.py (app = Flask(__name__))
/pages
/__init__.py ('pages' blueprint)
/users
/__init__.py ('users' blueprint)
Run Code Online (Sandbox Code Playgroud)
在server/__init__.py:
from server.pages import pages
from server.users import users
app = Flask(__name__)
app.register_blueprint(pages)
app.register_blueprint(users)
Run Code Online (Sandbox Code Playgroud)
在server/pages/__init__.py:
pages = Blueprint('pages', __name__)
@pages.route('/')
def index(): return '<h1>Index</h1>'
Run Code Online (Sandbox Code Playgroud)
在server/users/__init__.py:
users = Blueprint('users', __name__)
@users.route('/login')
def login():
...
return redirect(url_for('pages.index'))
^^^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
这个url_for电话提出了BuildError: ('pages.index', {}, None)
什么是一种方法'pages.index'?
(我尝试导入模块,但这不起作用)
尽我所知,你正在按照你应该的方式组织你的应用程序。
我已经重新创建了您的设置(尽管在单个文件中),您可以在此处结帐。这段代码在我的机器上运行。
https://gist.github.com/enlore/80bf02346d6cabcba5b1
在 Flask 中,您可以.login从拥有的蓝图中使用相对端点 ( )访问给定的视图函数,或者在user.login任何地方通过绝对端点 ( )访问给定的视图函数。
我的钱是你在视图函数名称中打错了。
就像 Mark Hildreth 在评论中所说的那样,调试问题的一个好方法是查看您的 url 映射。
>>> from app import app
>>> app.url_map
Map([<Rule '/login' (HEAD, OPTIONS, GET) -> user.login>,
<Rule '/' (HEAD, OPTIONS, GET) -> pages.index>,
<Rule '/static/<filename>' (HEAD, OPTIONS, GET) -> static>])
>>>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9722 次 |
| 最近记录: |