Django中的自定义图像小部件

时间:2019-02-10 18:11:46

标签: django django-widget

我正尝试通过以下方式构建自定义图像小部件:

class ImageWidget(forms.widgets.Widget):

    template_name = 'widgets/picture.html'

    def get_context(self, name, value, attrs=None):

        return {'widget': {
            'name': name,
            'value': value,
        }}

    def render(self, name, value, attrs=None):
        context = self.get_context(name, value, attrs)
        template = loader.get_template(self.template_name).render(context)
        return mark_safe(template)

问题在于 value 包含文件的相对路径,但不包含MEDIA前缀(就像表单字段一样)。我不知道如何在Django 1.8中追加或访问该字段

以下是 picture.html 文件的内容,以防万一:

Currently: <img src={{ widget.value }}>
<br>Change: <input id="id_profile_image" name="profile_image" type="file">

渲染的HTML:

<p>
  <label for="id_profile_image">Profile image:</label> Currently: <img src="profile_images/CSC_00111.jpeg">
  <br>Change: <input id="id_profile_image" name="profile_image" type="file">
</p>

我需要 src 属性值为 /media/profile_images/CSC_00111.jpeg

1 个答案:

答案 0 :(得分:0)

您可以像这样手动添加媒体

def get_context(self, name, value, attrs=None):

        return {'widget': {
            'name': name,
            'value': '/media/' + value,
        }}