【发布时间】:2013-12-23 08:15:28
【问题描述】:
目前我有一个带有徽标字段的大学模型。
我希望用户在编辑大学详细信息时能够在特定目录中的现有图片中选择一张图片。图片路径将保存在 logo 字段中。
在大学里
class University(models.Model):
logo = models.FilePathField()
当我基于大学模型创建模型表单(UniversityForm)时,文件路径字段默认显示为选择框。我注意到如果我在下面输入代码
在大学表格中
class UniversityForm(ModelForm):
def __init__(self, *args, **kwargs):
super(UniversityForm, self).__init__(*args, **kwargs)
self.fields['logo'] = forms.FilePathField(path=UNIVERSITY_LOGOS_DIR, match=".*\.(png|jpg)$", recursive=False)
每次我刷新页面时,所选的框都会在 logos 目录下填充图像名称,我可以选择该大学的图像。
但是当我想沿选择框显示所选图像时出现问题,似乎文件路径字段保存了图像的绝对路径,我无法从文件路径字段中检索所选图像。
我试过Django Templates - how do I output the relative path of file when using a FilePathField recursively,现在我可以检索文件名并使用下面的代码显示它
在大学表格中
class UniversityForm(ModelForm):
def __init__(self, *args, **kwargs):
super(UniversityForm, self).__init__(*args, **kwargs)
self.fields['logo'] = forms.FilePathField(path=UNIVERSITY_LOGOS_DIR, match=".*\.(png|jpg)$", recursive=False)
def university_logo_url(self):
return self.fields['logo'].choices[0][1]
在模板中
{% if field.label == 'Logo' %}
<div class="fieldWrapper">
{{ field.errors }}
{{ field.label_tag }}: {{ field }}
<img src="{{MEDIA_URL}}university_logos/{{ form.university_logo_url }}" alt="university_logo"/>
</div>
{% else %}
<div class="fieldWrapper">
{{ field.errors }}
{{ field.label_tag }}: {{ field }}
</div>
{% endif %}
但毕竟我仍然无法弄清楚在FilePathfield中获取所选图像的方法,并且在选择变化时,我无法刷新图像。因此,每次服务器重新启动以前的选择时,我都无法保存路径选择的图像 会消失的。
在 django 中满足我的要求的正确方法是什么? 也许创建另一个小部件以从中选择并将结果保存在文件路径字段中?
仅供参考,我使用https://stackoverflow.com/a/1235542/2601579 获取图像
【问题讨论】:
标签: html django django-models django-forms django-templates