Django 从文件URL确定模型实例

Django 从文件URL确定模型实例,django,url-routing,filefield,Django,Url Routing,Filefield,如果请求中的URL是一个已知的静态文件,我如何确定哪个模型实例引用了该文件 如果我有几个不同的Django模型,每个模型都有一个ImageField,那么这些字段都知道如何在文件系统上存储相对路径: #models.py 从django.db导入模型 Lorem类(models.Model): name=models.CharField(最大长度=200) secret\u icon=models.ImageField(上传到class='secrets') secret\u banner=mo

如果请求中的URL是一个已知的静态文件,我如何确定哪个模型实例引用了该文件

如果我有几个不同的Django模型,每个模型都有一个
ImageField
,那么这些字段都知道如何在文件系统上存储相对路径:

#models.py
从django.db导入模型
Lorem类(models.Model):
name=models.CharField(最大长度=200)
secret\u icon=models.ImageField(上传到class='secrets')
secret\u banner=models.ImageField(上传到class='secrets')
类UserProfile(models.Model):
user=models.ForeignKey(用户)
secret\u image=models.ImageField(上传到class='secrets')
然后,模板可以使用(例如)instance.secret\u banner.url属性呈现这些图像

当同一URL的请求传入时,我希望在视图中处理该请求:

#url.py
从django.url导入路径
从.views导入StaticImageView
URL模式=[
...,
路径(settings.MEDIA_URL+'secrets/',StaticImageView.as_view(),name='static-image'),
]
因此,
StaticImageView.get
方法将被传递从URL解析的
relpath
参数

在这一点上,我需要做更多的处理,基于哪个实例创建了这个静态图像的URL

# views.py

from django.views.generic import View

class StaticImageView(View):

    def get(self, request, relpath):
        instance = figure_out_the_model_instance_from_url_relpath(relpath)
        do_more_with(instance)
我不知道的是如何编写
从url\u relpath中找出\u模型\u实例\u
代码


如何使用该路径查找生成该URL的模型和实例?

您可以从图像文件或图像的文件名查询和获取实例。 首先从
relpath
获取的文件名,然后查询实例

示例代码示例:

class StaticImageView(View):

    def get(self, request, relpath):
        fname = get_filename_from_relpath(relpath)
        instance = Lorem.objects.get(secret_icon=fname)
        
        do_more_with_instance(instance)

我假设您想要基于
secret\u图标
图像获取。您可以根据需要进行更改。

您可以从映像文件或映像的文件名中查询并获取实例。 首先从
relpath
获取的文件名,然后查询实例

示例代码示例:

class StaticImageView(View):

    def get(self, request, relpath):
        fname = get_filename_from_relpath(relpath)
        instance = Lorem.objects.get(secret_icon=fname)
        
        do_more_with_instance(instance)

我假设您想要基于
secret\u图标
图像获取。您可以根据需要对其进行更改。

是否可以进行编辑以显示为什么需要
get\u filename\u from\u relpath
relpath
还没有匹配的路径吗?@bignose您可以看到您正在到达的路径,这取决于您是否需要它。我没有这样的设置,因此无法验证。其想法是提供高级解决方案!您是否可以编辑以显示为什么需要
get\u filename\u from\u relpath
relpath
还没有匹配的路径吗?@bignose您可以看到您正在到达的路径,这取决于您是否需要它。我没有这样的设置,因此无法验证。其想法是提供高级解决方案!