我一直在尝试覆盖默认的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>
按原样保留所有内容,页面上仅呈现一个“选择文件”按钮,但未呈现到我当前文件的链接或复选框以清除。如何显示这些内容?