项目结构
├── app
│ ├── forms
│ │ ├── init.py
│ │ ├── login.py
│ ├── init.py
│ └── views
│ ├── admin.py
│ ├── blog.py
│ ├── book.py
│ ├── init.py
├── config
│ ├── default.py
│ ├── development.py
│ ├── init.py
from app import create_app
app = create_app()
if __name__ == '__main__':
app.run()
def create_app():
app = Flask(__name__)
config = load_config()
app.config.from_object(config)
register_routes(app)
return app
def register_routes(app):
from .views import admin, blog, book
app.register_blueprint(admin.site, url_prefix='')
app.register_blueprint(blog.site, url_prefix='/blog')
app.register_blueprint(book.site, url_prefix='/book')
from flask_flatpages import FlatPages
from .. import create_app
site = Blueprint('blog',__name__)
app = create_app()
flatpages = FlatPages(app)
运行时出错
Traceback (most recent call last):
File "run.py", line 13, in <module>
app = create_app()
File "/home/honmaple/website/app/__init__.py", line 21, in create_app
register_routes(app)
File "/home/honmaple/website/app/__init__.py", line 29, in register_routes
from .views import admin, blog, book
File "/home/honmaple/website/app/views/blog.py", line 18, in <module>
app = create_app()
File "/home/honmaple/website/app/__init__.py", line 21, in create_app
register_routes(app)
File "/home/honmaple/website/app/__init__.py", line 29, in register_routes
from .views import admin, blog, book
ImportError: cannot import name 'blog'
from .. import create_app
还有我本机是 python3.5,服务器上是 python3.4,本机测试正常,服务器上运行出错,难道是版本的原因
1
honmaple OP |
2
billion 2015-11-23 11:10:16 +08:00
每个文件夹下面的 init 文件,文件名前后都有两个下划线__init__.py
|
4
yangtukun1412 2015-11-23 11:55:28 +08:00
循环引用了吧
|
5
cppgohan 2015-11-23 11:57:48 +08:00
lz 搞定了吗?
最近一年正职写 android, 偶尔写 python, 也都直接用完整包名的 import... `from app.views import admin, blog, book` |
6
honmaple OP @yangtukun1412 什么意思?
|
8
chenkun0128 2015-11-23 12:45:41 +08:00
sys.path.insert(0, os.path.dirname(__file__)) ?_?
|
9
honmaple OP 原来的问题搞定了,
def register_routes(app): from .views import admin, blog, book app.register_blueprint(admin.site, url_prefix='') app.register_blueprint(blog.site, url_prefix='/blog') app.register_blueprint(book.site, url_prefix='/book') 改成 def register_routes(app): from .views import admin, book app.register_blueprint(admin.site, url_prefix='') app.register_blueprint(book.site, url_prefix='/book') from .views.blog import site app.register_blueprint(site, url_prefix='/blog') 暂时可以运行了,不过数据库又出问题了,现在正在搞定数据库, python 部署果然是个问题 |
10
florije 2015-11-23 13:15:03 +08:00
blog.py 中的 register_pages 这个循环引用了,然后楼主也是不遵循 pep8 啊……
# -*- coding=UTF-8 -*-一般放文件最开始位置,要跑起来 LZ 的应用也很费劲啊…… |
11
florije 2015-11-23 13:20:02 +08:00
不过明显看出来 LZ 的 django 的功底很深厚啊,写的代码还是很不错,而且不是用 IDE 写的,想必有 3+年的 python 经验了吧。
|
12
honmaple OP @florije 额,别嘲讽我了,代码上还有很多重复工作没优化,不过我只有一年经验,刚入门 django 觉得 django 太大不自由就转 flask 了。。。话说你是怎么看出我不是用 IDE 写的(用的 vim)
|
13
honmaple OP @florije 问一下上个问题,我将
register_routes(app) register_assets(app) register_db(app) register_jinja2(app) 写到函数外是不是就没有循环引用了 |
14
florije 2015-11-23 13:49:11 +08:00
@honmaple 没有想到是 vim ,只是想是类似的比如说 sublime 的工具,因为很多代码没有格式化(ps ,一般 IDE 都带这种功能,起码我让小伙伴提交前都必须 reformat 一下),这种就是顺序问题,看报错里面也能看出来端倪,就是报了两次 register_routes(app)这个错误。这个没有详细看代码就是看了报错提示的两个文件,简单分析了下。
|
15
gevin 2015-11-24 08:30:57 +08:00
|