繁体   English   中英

ImportError:没有名为视图的模块

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM