Django覆盖ClearableFileInput

时间:2018-10-16 23:15:03

标签: django-forms django-widget

我一直在尝试覆盖默认的Django ClearableFileInput小部件,并且{% if widget.is_initial %}出现问题,因为我的现有文件未在页面上正确呈现。至此,我还没有为clearablefileinput编辑现有的django html代码,只是尝试通过文件inventory/custom_clearable_file_input.html

中的以下代码进行自我设置
    {% if widget.is_initial %}{{ widget.initial_text }}: <a href="{{ widget.value.url }}">{{ widget.value }}</a>{% if not widget.required %}
    <input type="checkbox" name="{{ widget.checkbox_name }}" id="{{ widget.checkbox_id }}">
    <label for="{{ widget.checkbox_id }}">{{ widget.clear_checkbox_label }}</label>{% endif %}<br>
    {{ widget.input_text }}:{% endif %}
    <input type="{{ widget.type }}" name="{{ widget.name }}"{% include "django/forms/widgets/attrs.html" %}>
    {% if widget.is_initial %}</p>{% endif %}

根据Django 1.11文档,覆盖小部件的方式如下:

    class CustomClearableFileInput(ClearableFileInput):
        template_name = 'inventory/custom_clearable_file_input.html'

然后按原样传递给表单:

   class BusinessSettingsForm(forms.ModelForm):
       business_logo = forms.ImageField(widget = CustomClearableFileInput())
       class Meta:
           model = BusinessSettings
           fields = (
               'business_name',
               'tax_rate',
               'business_logo',
           )
           widgets = {
               'business_name': forms.TextInput(attrs={'class' : 'form-control', 'autofocus':'', 'required':True}),
               'tax_rate': forms.NumberInput(attrs={'class' : 'form-control', 'autocomplete': 'off', 'step': "0.01"}),
           }

这是我感到困惑的地方。为什么我看不到我的初始图像?如果我选择不包括{% if widget.is_initial %},则可以使{% if widget.value.url %}工作并显示指向我的图像的链接,但是{% if widget.initial_text %}{% if widget.input_text %}不会显示任何内容。 / p>

按原样保留所有内容,页面上仅呈现一个“选择文件”按钮,但未呈现到我当前文件的链接或复选框以清除。如何显示这些内容?

0 个答案:

没有答案