Django - Dynamic ChoiceField - 静态目录中的所有图像

时间:2013-08-22 14:12:06

标签: django django-forms

我想创建一个应用程序,允许用户在包含在特定文件夹中的所有内容之间选择一个图像。下拉输入将呈现图像和文件名的缩略图。 选择值将是图像的路径。

我知道可以用jQuery UI and javascript来实现,但我想知道如何在表单中动态生成选择以获得所需的视觉效果。

如果您有其他想法,感谢您的任何建议

动态表格(不完整):

filename_list = ???
path_list = ???
images_thumbnails_list = ???

class imagesForm(forms.Form):
    def __init__(self, user, *args, **kwargs):
        super(imagesForm, self).__init__(*args, **kwargs)
        self.fields['selectedImage'] = forms.ChoiceField(choices=
                         for path in path_list: str(path),
                         for filename in filename_list: str(filename)
                         for thumbnail in images_thumbnails_list: thumbnail )

所需输入字段的示例:

  <select name="webmenu" id="webmenu">
    <option value="calendar" data-image="icons/icon_calendar.gif">Calendar</option>
    <option value="shopping_cart" data-image="icons/icon_cart.gif">Shopping Cart</option>
    <option value="cd" data-image="icons/icon_cd.gif">CD</option>
    <option value="email"  selected="selected" title="icons/icon_email.gif">Email</option>
    <option value="faq" data-image="icons/icon_faq.gif">FAQ</option>
    <option value="games" data-image="icons/icon_games.gif">Games</option>
  </select>

视觉示例:

enter image description here

1 个答案:

答案 0 :(得分:1)

我认为这个任务的一个很好的解决方案是为你做出选择的模型

class Countries(models.Model):
    name = models.CharField(length=255)
    thumbnail = models.ImageField(upload_to='static_directory')

并使用fixtures填充这些数据

countries_list = Countries.objects.all()

class imagesForm(forms.Form):
    def __init__(self, user, *args, **kwargs):
        super(imagesForm, self).__init__(*args, **kwargs)
        self.fields['selectedImage'] = forms.ChoiceField(choices=countries_list)

并在您的模板中呈现它们

{% for country in field.choices %}
    <option value="{{country.id}}"><img src="{{country.image.url}}"/> {{country.name}}</option>
{% endfor %}