繁体   English   中英

Django在带有HttpResponse的模板中使用{{MEDIA_URL}}

[英]Django using {{ MEDIA_URL }} in template with HttpResponse

我正在尝试在模板标签中使用{{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",
)

现在这个答案建议这样做

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

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

目前,它在我的html中显示为空白。 谢谢

原来我不需要这些。 由于我使用nginx处理我的网站,因此我只将媒体路径添加到nginx位置

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

并像这样更改了我的html代码

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

所以现在一切都很好

您没有在响应的上下文中传递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 $}" />

这样,媒体网址就会从您的设置传递到您的Angular应用程序中,并加载到Angular模板中(尽管所有这些都可以使用更好的命名,但是您可以理解)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM