gpt4 book ai didi

python - Django FilePathField 不适用于相对路径

转载 作者:太空宇宙 更新时间:2023-11-04 05:15:57 25 4
gpt4 key购买 nike

有一个模型语言。语言对象通过Django-admin创建Admin。他们必须从下拉菜单中选择合适的标志文件。

问题是当我部署项目时没有可供选择的标志。

由于静态文件是在部署前收集的,所以我尝试设置这个路径:

flag = models.FilePathField(path='static/img/flags/550px',default='')

但是如您所见,它找不到任何东西。

enter image description here

如果我这样做,我可以从标志中选择:

flag = models.FilePathField(path=settings.BASE_DIR+'/static/img/flags/550px',default='')

但是仅仅调用 language.flag 是行不通的,因为它返回绝对路径。

<img src = "{{ language.flag }}">

产生这个:

<img src="/home/django/MyProject/static/img/flags/550px/ar.png">

我想到的唯一解决方案是创建一个剥离 path 切割“/home/django/MyProject/”的属性,但我不确定这是否是个好主意。

有没有更好的办法?

class Language(models.Model):
shortcut = models.CharField(max_length=40,
help_text=_('Shortcut of the language'),
unique=True)

name = models.CharField(max_length=40,
help_text=_('Name of the language'),
unique=True, verbose_name=_("Language"))

flag = models.FilePathField(path='static/img/flags/550px',default='/static/img/icons/check-icon.png')

def __str__(self):
return self.name

编辑:

管理.py:

from django.contrib import admin
from models import Language

admin.site.register(Language)

最佳答案

FilePathField.path
Required. The absolute filesystem path to a directory from which this >FilePathField should get its choices. Example: "/home/images".

强调我的。

当您在此处使用绝对路径时,您的模板确实会生成相对路径我无法告诉您那是什么,因为您在 FilePathField 中设置的路径与您声称获得的路径相互矛盾。但我可以向您保证,该模板将给出一个相对路径。

不确定,如果它是一个错误(可能是),但您的管理员将完整路径保存在标志对象中,而不仅仅是相对路径。所以我想使用属性是一种选择

 @property
flag_path(self):
return self.flag.replace(settings.BASE_DIR,'')

另一种选择是覆盖管理保存模型方法以在此时进行剥离

关于python - Django FilePathField 不适用于相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41696920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com