我是Django的新手,我有一个问题希望你能帮我解决。
首先,我正在使用Apache和Postgres作为我的DBMS,在虚拟环境中使用Django 1.8.3和Python 2.7.6。
我的models.py文件中有以下模型:
class Hotel(models.Model):
# ...
name = models.TextField(blank=True, null=True)
img = models.ImageField(upload_to='images/',blank=True, null=True)
stars = models.IntegerField(blank=True, null=True)
# ...
class Meta:
managed = False
db_table = 'hotel'
我的views.py文件看起来像这个
from django.http import HttpResponse, Http404
from webServices.models import Hotels
from django.core import serializers
from django.core.exceptions import ObjectDoesNotExist
import json
# ...
def all_hotels(request):
hotels = Hotel.objects.values('name', 'img', 'stars')
data = json.dumps(list(hotels), indent = 4)
return HttpResponse(data, content_type='application/json')
settings.py文件上的MEDIA_URL和MEDIA_ROOT变量定义如下:
MEDIA_URL = '/media/'
MEDIA_ROOT = '/path_to_my_projects_directory/media/'
正如您所看到的,我正在开发一个服务器,该服务器返回一个json,其中包含DB中每个酒店的数据。它确实很好用。
Json的img字段一直为"null",直到现在我需要将本地存储的每个图像与其酒店关联起来,并在其中返回其URL。
问题是我不知道怎么做。
很高兴知道DB是通过python脚本更新的,因为数据位于Google SpreadSheet中(如果需要,我会向您展示)。
我搜索了一整天,找到了这篇文章如何在Django中手动分配imagefield和这篇文章http://www.revsys.com/blog/2014/dec/03/loading-django-files-from-code/,但我需要它们更具体一点。
嗨,在你的视图中试试这个。py
from django.conf import settings
url = request.scheme
url += "://"
url += request.META['HTTP_HOST']
url += settings.MEDIA_URL
_len = len(hotels)
_range = range(0, _len)
hotels = Hotel.objects.values('name', 'img', 'stars')
for x in _range:
hotels[x]['img'] = "%s%s" % (url, hotels[x]['img'])
data = json.dumps(list(hotels), indent = 4)
return HttpResponse(data, content_type='application/json')