如何将本地存储的图像分配给ImageField字段,并在Django中返回其URL



我是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')

最新更新