ImportError:没有模块命名视图



我在flask中编写了一个web应用程序,它显示从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')

这是我的任务

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)

相关内容

  • 没有找到相关文章

最新更新