Django在模板中使用{{MEDIA_URL}}和HttpResponse

时间:2015-02-04 16:29:45

标签: python django

我试图在我的模板代码中使用{{MEDIA_URL}}。这是我的HTML代码:

<li data-ng-repeat="image in pictures[currentCat]">
    <a>
        <img src="{{ MEDIA_URL }}{$ image.imgs $}" />
    </a>
</li>

我将json发送到js并在AngularJS中使用它

$http.get("imagelist/").success(function(data) {
      $scope.pictures=data;
});

我已将此部分添加到setting.py

TEMPLATE_CONTEXT_PROCESSORS = (
  "django.contrib.auth.context_processors.auth",
  "django.core.context_processors.media",
)

现在this answer建议这样做

from django.template.context import RequestContext

context = {'latest': p}
render_to_response('Question/latest.html',
                   context_instance=RequestContext(request, context))

但是我使用的是HttpResponse,而且我的代码无效。

def getimagelist(request):
    dictionaries=[]
    for cat in Category.objects.all():
        dictionary=[obj.as_json() for obj in Gallery.objects.filter(cat_id=cat.id)]
        dictionaries.append(dictionary)
    return HttpResponse(json.dumps(dictionaries), content_type='application/json')

我的问题是在使用{{ MEDIA_URL }}时如何在代码中使用HttpResponse

目前它在我的HTML中显示为空白。 感谢

2 个答案:

答案 0 :(得分:2)

原来我不需要其中任何一个。由于我使用nginx来处理我的网站,我只是添加了nginx位置的媒体路径

location /media/ {
               autoindex on;
               alias mysitepath/media/;
          }

并像我这样改变了我的HTML代码

<img src="/media/{$ image.imgs $}" />

所以现在每个人都可以正常工作

答案 1 :(得分:0)

您没有在响应的上下文中传递MEDIA_URL变量。你应该做这样的事情:

from django.conf import settings
data = {'pictures': dictionaries, 'mediaUrl': settings.MEDIA_URL}

HttpResponse(json.dumps(data), content_type='application/json')

在你的角度代码中:

$http.get("imagelist/").success(function(data) {
      $scope.pictures = data.pictures;
      $scope.mediaUrl = data.mediaUrl;
});

在你的模板中

<img src="{$ mediaUrl $}{$ image.imgs $}" />

这样,媒体网址就会从你的设置传递到你的角度应用程序并加载到角度模板中(所有这些都可以使用更好的命名,但你明白了。)