dea*_*mon 17 python url wsgi url-routing flask
Flask提供了一种url_for功能,可根据URL模式为处理程序生成URL.但这意味着处理程序函数必须在整个应用程序中具有唯一的名称.那是对的吗?
例
模块A有一个处理程序index:
@app.route('/')
def index(): pass
Run Code Online (Sandbox Code Playgroud)
模块B有另一个处理程序index:
@app.route('/anotherindex')
def index(): pass
Run Code Online (Sandbox Code Playgroud)
如何区分index构建URL时调用的处理程序?
url_for('index')
Run Code Online (Sandbox Code Playgroud)
mde*_*ous 50
我不知道如何处理由同一模块路由的所有视图.
我最常做的是在不同的模块分开我的观点(像你这样用模块A和B),并注册为蓝图,在此之后,使用时url_for()的功能,你可以用你的蓝图名称前缀视图名称,然后避免冲突和潜在的问题.
这是一个例子:
main_views.py:
from flask import Blueprint
main = Blueprint('main', __name__)
@main.route('/')
def index():
pass
Run Code Online (Sandbox Code Playgroud)
admin_views.py:
from flask import Blueprint
admin = Blueprint('admin', __name__)
@admin.route('/admin')
def index():
pass
Run Code Online (Sandbox Code Playgroud)
application.py:
from flask import Flask
from main_views import main
from admin_views import admin
app = Flask('my_application')
app.register_blueprint(main)
app.register_blueprint(admin)
Run Code Online (Sandbox Code Playgroud)
现在,要访问2个索引视图并仍然区分其中一个,只需使用url_for('main.index')或url_for('admin.index')
关于使用蓝图进行路由的另一个有用的详细信息,在注册蓝图时,您可以传递一个url_prefix参数,该参数将应用于此蓝图中的每个视图.
例如,给出以下代码:
admin_views.py
from flask import Blueprint
admin = Blueprint('admin', __name__)
@admin.route('/')
def index():
pass
@admin.route('/logout')
def logout():
pass
Run Code Online (Sandbox Code Playgroud)
application.py:
from flask import Flask
from admin_views import admin
app = Flask('my_application')
app.register_blueprint(admin, url_prefix='/admin')
Run Code Online (Sandbox Code Playgroud)
这两个视图将在URL /admin/和/admin/logout
| 归档时间: |
|
| 查看次数: |
4030 次 |
| 最近记录: |