【问题标题】:Django using {{ MEDIA_URL }} in template with HttpResponseDjango 在带有 HttpResponse 的模板中使用 {{ MEDIA_URL }}
【发布时间】:2015-04-04 06:35:33
【问题描述】:

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

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

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

【问题讨论】:

  • 您想在哪里使用 MEDIA_URL?您的响应对象没有对您的模板的任何引用,在这种情况下,您将获得的唯一响应将是您的字典转储。
  • 这个问题没有意义。您根本没有使用任何模板。你把那个 STATIC_URL 标签放在哪里了?
  • @DanielRoseman 它的&lt;img src="{{ MEDIA_URL }}{$ image.imgs $}" /&gt; 我编辑了我的问题
  • 但这仍然没有意义。您的观点根本没有提及任何模板。那么该模板标签在哪里使用呢?
  • @DanielRoseman 我用更多细节更新了我的问题

标签: python django


【解决方案1】:

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

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

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

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

所以现在一切正常

【讨论】:

    【解决方案2】:

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

    这样,媒体 url 从您的设置传递到您的 Angular 应用程序并加载到 Angular 模板中(尽管所有这些都可以使用更好的命名,但您明白了)。

    【讨论】:

    • 我的代码中没有包含任何模板。我应该如何自定义你的代码?
    • 正如@daniel-roseman 所说,如果您不想返回模板,则需要将 MEDIA_URL 作为返回给前端客户端的 json 的一部分传递(因此,角度)跨度>
    • 我试过这个。但是mediaUrl 是空白的。我在&lt;h1&gt;{$mediaUrl$}&lt;/h1&gt; 中对其进行了测试,没有任何显示
    • 你确定你已经在你的 django 项目中设置了 MEDIA_URL 设置吗?如果在视图中打印它会发生什么?您需要将 MEDIA_URL='/my/url/' 设置为您的 settings.py 文件
    • 这是我的 MEDIA_URL 设置 > MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(PROJECT_PATH, 'media')
    猜你喜欢
    • 1970-01-01
    • 2011-10-27
    • 2011-11-11
    • 1970-01-01
    • 2017-09-28
    • 2011-08-10
    • 2015-12-17
    • 2011-02-09
    • 2020-05-05
    相关资源
    最近更新 更多