2016-09-21 2 views
0

저는 작은 장고 프로젝트가 있습니다. 내 views.py에서 변수를 사용하여 tasks.py에 변수를 전달하고 변수를 사용하여 작업을 실행하려고 합니다만, 이름이 아닙니다. 정의 오류, 필자는 많은 솔루션은 다른 질문에서 본 필자 시도하지만 난 그것을 얻이 수없는 것 여기 NameError : 전역 이름 'query'가 정의되어 있지 않습니다.

여기 내 views.py

# -*- coding: utf-8 -*- 
from __future__ import unicode_literals 
from django.shortcuts import render, loader 
from django.template import Context 
from django.http import HttpResponse 
import json 
import requests 
from tasks import rti 

def index(request): 
    return render(request, 'bus/index.html') 

def search(request): 
    query = request.GET.get('q') 
    t = loader.get_template('bus/search.html') 
    c = Context({ 'query': query,}) 
    rti() 
    return HttpResponse(t.render(c)) 

내 tasks.py

from background_task import background 
import time 


@background(schedule=1) 
def rti(): 
    timeout = time.time() + 60 * 15 
    while time.time() < timeout: 
     from views import search 
     dblink = '*apiurl*' + str(query) + '&format=json' 
     savelink = 'bus/static/bus/stop' + str(query)+ '.json' 
     r = requests.get(dblink) 
     jsondata = json.loads(r.text) 
     with open(savelink, 'w') as f: 
      json.dump(jsondata, f) 
입니다 여기

은 추적입니다 :

Traceback (most recent call last): 
    File "/Users/dylankilkenny/dev/python/test2/lib/python2.7/site-packages/background_task/tasks.py", line 49, in bg_runner 
    func(*args, **kwargs) 
    File "/Users/dylankilkenny/dev/python/test2/mysite/bus/tasks.py", line 9, in rti 
    from views import search 
NameError: global name 'query' is not defined 

답변

0

당신은 당신이 백그라운드 작업이 내부 쿼리 변수에 대해 아무것도 모르기 때문에, def rti(query):에 방법의 정의 변경하고보기 rti(query)에서 사용합니다.

0

쿼리를 인수로 사용하도록 작업을 수정해야합니다. 당신이보기 당신은 views.py 내에서 호출 한 방법 rti()에 대한 인수를 전달하지 않은

rti(query) 
+0

필자는이 시도하고이 오류를 가지고 :'형식 오류 : (RTI)는 인수가없는 (1 given)' –

+0

메소드가'def rti (query)'로 갱신되지 않은 것처럼 들립니다. 작업을 실행중인 프로세스를 다시 시작했는지 확인하십시오. – Alasdair

0

에서 작업을 호출 할 때

@background(schedule=1) 
def rti(query): 
    ... 

그런 다음 쿼리를 전달합니다. 그리고 이렇게하려면 rti() tasks.py 안에 메서드를 정의하는 동안 쿼리와 같은 인수를 취해야합니다. 그 후에 을 rti() 안에 사용할 수 있습니다.

다음을 따르십시오

tasks.py :

@background(schedule=1) 
def rti(query): 
    {...your code} 

views.py :

def search(request): 
    query = request.GET.get('q') 
    t = loader.get_template('bus/search.html') 
    c = Context({ 'query': query,}) 
    rti(query)  #calling rti from tasks.py passing the argument 
    return HttpResponse(t.render(c)) 
관련 문제