我是Django的新手。我正在开发一个使用天气API来获取天气的项目。一切正常,直到models.py制作并在views.py上导入城市
我用ver。 13年1月11日
models.py
from __future__ import unicode_literals
from django.db import models
class city(models.Model):
name = models.CharField(max_length=25)
def __str__(self):
return self.name
class Meta:
verbose_name_plural ='cities'
views.py(错误来自cities = city.objects.all())
import requests
from django.shortcuts import render
from .models import city
def index(request):
url= 'http://api.openweathermap.org/data/2.5/weather?q={}& units=imperial&appid=e1a2ef38103d2e572d316e38452e2acd'
city = 'Lucknow'
cities = city.objects.all()
weather_data =[]
for city in cities:
r= requests.get(url.format(city)).json()
city_weather = {
'city':city.name ,
'temperature' :r['main']['temp'],
'description' :r['weather'][0]['description'],
'icon' :r['weather'][0]['icon'] ,
}
weather_data.append(city_weather)
print(weather_data)
context = {'weather_data' : city_weather}
return render(request,'weather/weather.html', context)
答案 0 :(得分:1)
在index
函数中,您写道:
def index(request):
url= 'http://api.openweathermap.org/data/2.5/weather?q={}& units=imperial&appid=e1a2ef38103d2e572d316e38452e2acd'
city = 'Lucknow'
cities = city.objects.all()
# ...
因此,您在此处将city
定义为本地作用域变量,并使用字符串值。快速修复是重命名字符串,如:
def index(request):
url= 'http://api.openweathermap.org/data/2.5/weather?q={}& units=imperial&appid=e1a2ef38103d2e572d316e38452e2acd'
city_ = 'Lucknow'
cities = city.objects.all()
# ...
# use city_ for the string element
但是,一个班级通常以大写字母开头,所以我建议重命名你的班级City
而不是city
。
此外,我发现您定义此字符串很奇怪,因为现在在视图中,您应该使用它。 url.format(..)
应该使用查询集中city.name
对象的City
。
答案 1 :(得分:0)
解决此问题。
对于动态表名,您可以使用
table_name = 'MyTable'
model = getattr(YOURAPP.models, table_name)
model.objects.all()