【问题标题】:Django display image on RadioSelect or CheckboxesDjango 在 RadioSelect 或 Checkboxes 上显示图像
【发布时间】:2014-05-03 08:12:58
【问题描述】:

我是 django 的新手,我正在尝试将数据库中的图片显示到单选按钮或复选框上。我该怎么做?

我有这个模型

class MyItems(models.Model):
itemName=models.CharField(max_length=100)
itemDesc=models.CharField(max_length=400)
itemImage=models.ImageField(upload_to='pictures')

class categories(models.Model):
catName=models.CharField(max_length=100)
items=models.ManyToManyField(MyItems)

用户将图片上传到页面,他们可以将它们分类。

我可以这样做以显示我的选择

class catForm(forms.Form):
catName=forms.CharField()
items=forms.ChoiceField(widget=forms.RadioSelect,choices=(MyItems.objects.all())

但是如何将类似 img 标签的内容放入标签中?

<img src="itemImage.url" /> 

浏览了许多教程,但没有一个从数据库中生成图像。

【问题讨论】:

    标签: django image forms


    【解决方案1】:

    使用 ModelForm 并进行一些自定义:

    第一个子类ModelChoiceField

    from django.utils.safestring import mark_safe
    
    
    class CustomChoiceField(forms.ModelChoiceField):
    
        def label_from_instance(self, obj):
            return mark_safe("<img src='%s'/>" % obj.itemImage.url)
    

    现在:

    class CatForm(forms.ModelForm):
      items = CustomChoiceField(widget=forms.RadioSelect, queryset=MyItems.objects.all())
    
      class Meta:
         model = categories
    

    现在使用此表单代替您的catForm。如果您之前没有使用过ModelForm,请参阅 django 文档了解详情。

    【讨论】:

    • 感谢回复,我试了一下,可以根据数据库项更改标签。但是,图像不会出现,标签上出现的只是这些而不是图片
    • 您看到的是文本而不是图像吗?顺便说一句,您需要在路径之前附加您的主机,例如尝试返回return "&lt;img src='http://localhost:8000/%s'/&gt;" % obj.itemImage.url
    • 我尝试添加 localhost:8000 但它仍然返回文本而不是图像。
    • 请查看更新后的答案,您必须将 html 标记为安全。现在它应该可以工作了
    • 是的,它有效!非常感谢,非常感谢您的帮助。顺便说一句,对于这些以及更高级的 django 内容,您有什么好的参考网站可以推荐吗?
    猜你喜欢
    • 1970-01-01
    • 2021-03-04
    • 2020-07-24
    • 1970-01-01
    • 2011-03-17
    • 1970-01-01
    • 2015-06-04
    • 2015-05-17
    • 1970-01-01
    相关资源
    最近更新 更多