2013-08-22 71 views
2

我想創建一個應用程序,允許用戶選擇包含在特定文件夾中的所有圖像之間的圖像。下拉式輸入將呈現圖像和文件名的縮略圖。 選擇值將是圖像的路徑。Django - Dynamic ChoiceField - 靜態目錄中的所有圖像

我知道可以用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

我覺得這個任務一個很好的解決辦法是做一個模型,您的選擇

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 %} 
+0

謝謝,我認爲這是解決方案。我看到你把{{country.id}}作爲選擇值。是否可以把國家對象呢?我猜只有在save()方法的形式? –

+0

你可以放置一個序列化的對象,但這將是一個非常糟糕的決定,我認爲你應該堅持ID,如果你有任何其他問題不要猶豫,並且如果你發現我的答案有幫助,請標記爲正確回答。 – amdorra

+0

我已經測試過你的解決方案,它的工作非常接近,問題出在模板上,{%for country in field.choices%}沒有循環,可能是訪問選項的錯誤方法 –