2015-06-03 2 views
5

Вот мое мнение:«Request» объект не имеет атрибута «META»

def data(request, symbol): 
    context_dict = {} 

    NASDAQ = "http://www.nasdaq.com/symbol/{}/financials?query=income-statement".format(symbol) 

    import urllib.request 
    from bs4 import BeautifulSoup 

    user_agent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7' 
    headers = {'User-Agent': user_agent, } 
    request = urllib.request.Request(NASDAQ, None, headers) # The assembled request 
    response = urllib.request.urlopen(request) 
    html_data = response.read() # The data u need 

    soup = BeautifulSoup(html_data) 
    genTable = soup.find_all("div", class_="genTable") 

    context_dict['genTable'] = genTable 

    return render(request, 'data.html', context_dict) 

Когда я вернусь HttpResponse, нет никакой ошибки.

Я пытаюсь сделать context_dict выше в шаблоне данных. Это дает мне 'Request' object has no attribute Meta. Как это исправить?

ответ

10

Вы заменили объект запроса передается на ваш взгляд по локальной переменной в строке

request = urllib.request.Request(NASDAQ, None, headers) # The assembled request 

Имя этой переменной что-то другое. Как

assembled_request = urllib.request.Request(NASDAQ, None, headers) # The assembled request 
response = urllib.request.urlopen(assembled_request) 
+0

Отлично. Он работает сейчас. Спасибо тонну :) – Bun

+1

Я столкнулся с подобной проблемой, но с классами общего вида. В моем случае виновником была модель с именем Request, которая заменяла объект запроса view. –

2

Вы переназначить запрос Джанго с возвращаемым значением из URLLIB, поэтому ваши другие линии не работают:

request = urllib.request.Request(NASDAQ, None, headers) 

Изменение выше линии так, что он оценивает нечто иное, чем request.

+0

: D Замечательный. работает сейчас! – Bun

Смежные вопросы