NameError:全局名称'查询'没有定义

时间:2016-09-21 12:32:27

标签: python django

我有一个小的django项目,我试图将一个变量从我的views.py传递到tasks.py并使用变量运行任务,但我得到的名字没有定义错误,香港专业教育学院尝试了很多解决方案我见过其他问题,但我似乎无法让它工作

这是我的views.py

declare @data table (Name varchar(100), Surname varchar(100), Extension int )
insert into @data select Comp.Name, Comp.Surname, Comp.Ext from Comp where Comp.Dept=25

declare @fieldName varchar(100) = 'Name'
declare @SQL varchar(100) = 'select ' + @fieldname + ' from @data where Extension=101'
execute(@SQL)

这是我的tasks.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))

这里是追溯:

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)

3 个答案:

答案 0 :(得分:0)

您必须将方法的定义更改为def rti(query):并在视图rti(query)中使用它,因为您的后台任务对内部的查询变量一无所知。

答案 1 :(得分:0)

您需要修改您的任务,以便将查询作为参数。

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

然后在视图中调用任务时传递查询

rti(query)

答案 2 :(得分:0)

您尚未向exec("newlst = {}".format(lst)) 内调用的方法rti()传递任何参数。为此,在views.py内定义方法rti()时,该方法应采用类似查询的参数。之后,您可以在tasks.py内使用query

请遵循以下:

tasks.py:

rti()

views.py:

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