2016-09-09 7 views
0

Im, пишущее веб-приложение в колбе, которое отображает остановки автобусов, извлеченные из api.ImportError: No module named views

У меня есть форма на 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 из взглядов на задачи, так что я могу искать апи для указанной остановки, в настоящее время, когда пользователь вводит номер остановки в action.html нагрузки штраф и отображает номер остановки, который вводит пользователь, но новый файл или данные не создаются для число стоп и сельдерей выдает ошибку о том,

ImportError: No module named views 

структура моего проекта

|____run.py 
|____app 
| |______init__.py 
| |____views.py 
| |____tasks.py 
| |____static 
| | |____json 
| |____templates 
| | |____action.html 
| | |____index.html 
+0

Попробуйте 'из app.views import stopno'. – Laszlowaty

+0

пробовал это уже, бросает ту же ошибку. –

ответ

0
from app.views import stopno 

??

+0

все еще бросает ту же ошибку –

+1

Слишком много вещей, называемых «приложением», плавающим вокруг. Переименуйте папку или переименуйте экземпляр приложения в свой код. – Paul

+2

Хотя я согласен с вашим ответом и вашим комментарием, чтобы сделать его лучше, подумайте об этом и удалите завершающие вопросительные знаки. – UpAndAdam

1

Вы пытаетесь сделать относительный импорт, но вы не делаете его явно относительным, который может работать или не работать, и который может вызвать непредвиденные ошибки. Вы должны сделать свой импорт явно по сравнению с:

from .views import stopno 

Таким образом, вам не придется беспокоиться о воспроизведении всего пути к модулю.