【问题标题】:Graphene Django image field get absolute path石墨烯 Django 图像字段获取绝对路径
【发布时间】:2019-08-19 15:26:13
【问题描述】:

我的 Django 模型中有一个图像字段,我正在尝试获取 Graphene 输出的图像字段的绝对路径。我记得使用 HttpRequest.build_absolute_uri 获取文件/图像字段的绝对 uri。所以,我决定在 Graphene Django 中使用相同的功能:

class PersonType(DjangoObjectType):
    def resolve_photo(self, info, **kwargs):
        print(info.context) # WSGIRequest
        print(info.context.build_absolute_uri(self.photo)) # Error here
        return self.photo

    class Meta:
       model = Person

因为这里的请求不是Django的HttpRequest(是WSGI Request),所以我无法使用Django的request的一些实用功能。

有没有一种方法可以从 WSGIRequest 创建 HttpRequest,或者是否有其他方法可以在 Graphene Django 中构建完整的 URL?阅读互联网上的文档、源代码或资源,我无法找到解决问题的方法。

【问题讨论】:

    标签: python django graphene-python


    【解决方案1】:

    谢谢它的工作,具体的错字是:

        def resolve_image(self, info):
            """Resolve product image absolute path"""
            if self.image:
                self.image = info.context.build_absolute_uri(self.image.url)
            return self.image
    

    【讨论】:

      【解决方案2】:

      有没有办法从 WSGIRequest.. 创建 HttpRequest?

      WSGIRequest 继承自 django.http.HttpRequest 因此,您应该能够使用 Django 请求的所有“公共”实用功能。

      所以有一个WSGIRequest 不是你真正的问题。如果info.context 真的是WSGIRequest,你应该可以:

       info.context.build_absolute_uri(self.photo)
      

      没有任何问题。

      我的猜测

      我不得不在这里猜测,因为你没有发布你收到的错误,问题出在self.photo

      【讨论】:

      • 那仍然没有提供绝对 URL。它提供这样的 URL:/media/people/pic.jpg。我需要它显示http://localhost:8000/media/people/pic.jpg
      • 我已经编辑了我的答案,如果您发布错误的堆栈跟踪将非常有帮助。
      • 我想我之前打错了,现在是这样的。谢谢!
      猜你喜欢
      • 2020-09-05
      • 2019-04-03
      • 2018-01-11
      • 2020-09-01
      • 2020-08-11
      • 2021-07-08
      • 2018-06-28
      • 2019-12-20
      • 2021-09-25
      相关资源
      最近更新 更多