ImportError:没有名为views的模块

时间:2016-09-09 13:15:05

标签: python module celery python-import celery-task

我在烧瓶中写了一个网络应用程序,显示从api拉出的公共汽车站。

我在index.html上有一个表单,用户可以在其中输入一个停止号,该数字在views.py中被选中,其中该函数还通过芹菜运行任务来获取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

2 个答案:

答案 0 :(得分:1)

您正在尝试进行相对导入,但是您没有明确地显示相对,这可能会或可能不会起作用,并且可能会导致意外错误。您应该明确相对于:

进行导入
from .views import stopno

这样您就不必担心复制模块的整个路径。

答案 1 :(得分:0)

from app.views import stopno

...