django imageField怎么获取路径字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django imageField怎么获取路径字符串相关的知识,希望对你有一定的参考价值。

参考技术A 例如:

picture = models.ImageField(......

取值:
用 unicode(picture) 即可。

ImageField / FileField Django 表单当前无法修剪文件名的路径

【中文标题】ImageField / FileField Django 表单当前无法修剪文件名的路径【英文标题】:ImageField / FileField Django form Currently unable to trim the path to filename 【发布时间】:2018-06-01 21:35:14 【问题描述】:

我有一个存储在 AWS S3 中的 ImageField(类似于 FileField)。在表单中,它具有显示图像文件路径的“当前”标签。我想修剪并只显示文件名。

参考Django : customizing FileField value while editing a model中的最新答案,我仍然无法正常工作。

它显示“当前”,文件路径名如下: https://imgur.com/a/xkUZi

form.py

class CustomClearableFileInput(ClearableFileInput):
    def get_template_substitution_values(self, value):
        """
        Return value-related substitutions.
        """
        logging.debug("CustomClearableFileInput %s",value) <-- it never came here
        return 
            'initial': conditional_escape(path.basename(value.name)),
            'initial_url': conditional_escape(value.url),
        

class CompanySettingEdit(forms.ModelForm):
    display_companyname = forms.CharField(max_length=50, required=True)    
    company_logo = forms.ImageField(widget=CustomClearableFileInput)

    class Meta:
        model = Company
        fields = ("display_companyname","company_logo")

模型.py

class Company(models.Model):
    display_companyname = models.CharField(max_length=50)    
    company_logo = models.ImageField(upload_to=upload_to('company_logo/'), blank=True, null=True, storage=MediaStorage())

我怎么能有这样的东西:目前:filename.jpg

仅供参考 - ImageField / FileField,我都试过了,但没有任何区别。 我正在使用 Django==1.11.7

【问题讨论】:

你也可以分享你的CustomClearableFileInput吗? 抱歉忘记放了,和你的代码一样。不同之处在于 Meta 我有“company_logo”字段。这是否应该有所作为。我调试到 CustomClearableFileInput,它从来没有进入那个函数。调用时有什么问题吗? 你使用的是哪个 Django 版本!? 我正在使用 Django==1.11.7 【参考方案1】:

在 Django 1.11.x 中,get_template_substitution_values 已弃用。 CustomClearableFileInput 的新实现如下:

class CustomClearableFileInput(ClearableFileInput):
    def get_context(self, name, value, attrs):
        value.name = path.basename(value.name)
        context = super().get_context(name, value, attrs)       
        return context

【讨论】:

它有效。 imgur.com/a/0NEgu,但是有一个问题,链接现在不正确。它指向当前页面(localhost:8000/employee/companysettings),而它应该指向图像 url(类似于 test-static.s3.amazonaws.com/media/company_logo/15/…) 那没用,和原来的问题一样。它没有修剪imgur.com/a/qVF2i。 我让它与 value.name = path.basename(value.name) 一起工作。编辑答案。非常感谢 更改对象的内部状态很危险,但它似乎是这里唯一的解决方法,否则您将不得不覆盖小部件的 HTML 模板。做得好! :+1: ***.com/questions/48314365/… @DhiaTN 你能检查我的后续问题吗,不知何故它没有完成解决方案。

以上是关于django imageField怎么获取路径字符串的主要内容,如果未能解决你的问题,请参考以下文章

Django ImageField 为空时覆盖现有路径

ImageField / FileField Django表单目前无法修剪文件名的路径

DAY20-Django之FileField与ImageField

Django - 手动将图像保存到 ImageField 字段

django文件上传

django文件上传