[英]ImportError: No module named views
我在烧瓶中编写一个 Web 应用程序,显示从 api 中提取的公共汽车站。
我在 index.html 上有一个表单,用户可以在其中输入停止编号,该编号在 views.py 中获取,该函数还通过 celery 运行任务以获取 api 数据:
from flask import render_template, request
from app import app
@app.route('/')
def index():
return render_template('index.html')
@app.route('/stopno', methods=['POST'])
def stopno():
stopid = request.form['input']
from app.tasks import apidata
apidata.delay()
return render_template('action.html')
这是我的tasks.py:
from celery import Celery
import json
import requests
import time
ac = Celery('tasks', broker='amqp://localhost')
@ac.task(name='tasks.apidata')
def apidata():
from views import stopno
api = '*apiurl*:' + str(stopid)
saveinfo = 'static/stop' + str(stopid)+ '.json'
r = requests.get(api)
jsondata = json.loads(r.text)
with open(saveinfo, 'w') as f:
json.dump(jsondata, f)
我正在将视图中的 stopno 导入到任务中,因此我可以在 api 中搜索指定的停止,当前当用户输入停止编号时,action.html 加载正常并显示用户输入的停止编号,但没有创建新文件或数据停止号和芹菜抛出一个错误说
ImportError: No module named views
我的项目结构是
|____run.py
|____app
| |______init__.py
| |____views.py
| |____tasks.py
| |____static
| | |____json
| |____templates
| | |____action.html
| | |____index.html
您正在尝试进行相对导入,但没有使它显式相对,这可能会或可能不会起作用,并且可能导致意外错误。 您应该使导入与以下内容显式相关:
from .views import stopno
这样,您不必担心要复制模块的整个路径。
from app.views import stopno
??
导入对您不起作用,因为您正在尝试implicit relative import
。
这在python 2
中受支持,但在python 3
中不受支持。
试试这个: from .views import stopno
,这是python 3
支持的explicit relative import
如果这不起作用
尝试从这样的视图中导入所有内容: from .views import *
永远记住,在python 3
中, import *
仅在模块级别支持,而不是在这样的函数内部:
@ac.task(name='tasks.apidata')
def apidata():
from .views import *
因此,如果您使用 : from .views import *
,请确保您这样写:
from celery import Celery
import json
import requests
import time
from .views import *
ac = Celery('tasks', broker='amqp://localhost')
@ac.task(name='tasks.apidata')
def apidata():
api = '*apiurl*:' + str(stopid)
saveinfo = 'static/stop' + str(stopid)+ '.json'
r = requests.get(api)
jsondata = json.loads(r.text)
with open(saveinfo, 'w') as f:
json.dump(jsondata, f)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.