【问题标题】:How to import routes flask如何导入路由烧瓶
【发布时间】:2021-10-21 05:03:36
【问题描述】:

我是 Flask 的初学者,我创建了一个具有 MVC 结构的项目

  • 代码:
.
├── app
│. │── main.py
│  ├── controllers
│  │  ├── dbscan.py
│  │  ├── home.py
│  │  └── kmeans.py
│  ├── models
│  │  ├── dbscan.py
│  │  └── kmeans.py
│  ├── static
│  │  └── XXXX
│  └── views
│     └── XXXX

└── main.py

文件main.py

from flask import Flask

app = Flask(
    __name__,
    template_folder='app/views',
    static_folder='app/static'
)

if __name__ == "__main__":
    app.run(debug=True)

文件home.py

from flask import render_template

@app.route("/")
def home():
    return render_template('home.html')
  • 问题:

我已经理解了这个问题,但我不知道如何解决它......

controllers 文件和main.py 之间没有链接

那么,我如何链接controllers 文件夹和main.py 中存在的所有路由?

  • 更新:

home.py

from flask import Blueprint, render_template

home_hdl = Blueprint('home_hdl', __name__, template_folder='views')

@home_hdl.route("/")
def home():
    return render_template('home.html')

main.py

from flask import Flask

from app.controllers.home import home_hdl

app = Flask(
    __name__,
    template_folder='app/views',
    static_folder='app/static'
)
app.register_blueprint(home_hdl)

if __name__ == "__main__":
    app.run(debug=True)

文件夹

.
├── app
│  ├── controllers
│  │  ├── __init__.py
│  │  ├── dbscan.py
│  │  ├── home.py
│  │  └── kmeans.py
│  ├── main.py
│  ├── models
│  │  └── XXXX
│  ├── static
│  │  └── XXXX
│  └── views
│     └── XXXX
└── XXXX

【问题讨论】:

    标签: python-3.x flask


    【解决方案1】:

    试试这个

    1. 在控制器文件夹下的每个文件中定义一个处理程序(将处理路由的文件)。

      例如对于dbscan.py,您可以拥有

        from flask import Blueprint
        dbscan_handlers = Blueprint('dbscan_handlers', __name__, template_folder='views')
    
       # Your routes (in the dbscan.py file) will then be something like this
       @dbscan_handlers.route('/xyz/'):
        .....
    
       @dbscan_handlers.route('/def/'):
        ....
    
    1. 然后在main.py 中注册处理程序
        from controllers.dbscan import dbscan_handlers
        app.register_blueprint(dbscan_handlers)
        
    
    1. 请注意,要执行from controllers.abc import xyz,您需要在控制器中有一个__init.py__ 文件。该文件可以为空。

    2. 当有人访问你的应用时,它会转到 main.py,如果路由是 /xyz/ 模式,它将由 dbscan.py 文件处理

    【讨论】:

    • 感谢您提供此信息。但是我仍然有这个问题,如果我使用from controllers.dbscan import dbscan_hdl 我有这个错误`ModuleNotFoundError: No module named 'controllers'` 即使使用__init __. Py 如果我使用from app.controllers.home import home_hdl 我没有这个错误但是这个我去localhost:5000/ -> werkzeug.routing.BuildError: Could not build url for endpoint 'kmeans'. Did you mean 'kmeans_hdl.kmeans' instead? 我不明白怎么了
    • 我再次查看了你的目录结构,发现app是一个文件夹,控制器文件夹在它下面,main与app处于同一级别。我以为app 是你的项目文件夹。我实际上并没有看到拥有控制器父文件夹的优势。你可以扔掉它。我也不明白 home_hdl 和 kmeans 之间的关系。从你的名字来看,它们是不同的文件。您需要为每个文件都有一个处理程序
    • 确实,你是对的,我将main.py 移到了app 文件夹中,这更有意义,因为我有Docker 文件和其他文件(我更新了初始帖子)但是,我仍然有相同的错误:/werkzeug.routing.BuildError: Could not build url for endpoint 'kmeans'. Did you mean 'kmeans_hdl.kmeans' instead?
    • 没关系,那是另一个问题,我修复了它,在我的视图文件中我使用 url_for() 没有考虑蓝图!我将主题传递给已解决再次感谢!
    猜你喜欢
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    • 2019-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 2018-08-22
    相关资源
    最近更新 更多