请帮助解决问题。
我制作了一张上传照片的表格。
模特:
class UserProfile(User):
drum_photo = models.ImageField(
'Фото инструмента',
upload_to='userprofile/drum_photo/',
blank=True,
null=True,
)
形式:
class DrumDataForm(forms.ModelForm):
class Meta:
model = UserProfile
fields = (
'drum_photo',
)
template.html:
<div class="cell image_outer">
<label class="label">{{ form.drum_photo.label }}</label>
{{ form.drum_photo }}
{% if drum_photo %}
{% thumbnail drum_photo "230x230" crop="center" as im %}
<img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}">
{% endthumbnail %}
{% endif %}
{{ form.drum_photo.errors }}
</div>
结果浏览器显示以下标记:
<div class="cell image_outer">
<label class="label">foto</label>
now: <a href="/media/userprofile/drum_photo/kYNP5kPnTOU_2.jpg">userprofile/drum_photo/kYNP5kPnTOU_2.jpg</a> <input id="drum_photo-clear_id" name="drum_photo-clear" type="checkbox"> <label for="drum_photo-clear_id">Clear</label><br>Изменить: <input id="id_drum_photo" name="drum_photo" type="file">
<img src="/media/cache/0a/ca/0acac93baa399abad7d3c048ff20d5db.jpg" width="230" height="230">
</div>
问题是我需要更改布局(添加或删除一些元素)。请告诉我你在哪里存储需要更改的模板?
答案 0 :(得分:0)
我认为你要问的是呈现表单字段的模板在哪里。这由小部件控制,用于渲染字段。
django表单字段包含两件事:
HTML和呈现是小部件的责任。 Django带有一个collection of widgets,用于表单。其中大多数对应于普通的表单元素,但有一些专门的元素。
要自定义表单字段将输出的HTML,您需要自定义用于呈现字段的小部件。
您的文件上传表单使用FileField
,默认使用ClearableFileInput
小部件。
每个小部件都使用可选的 attrs 参数,您可以使用该参数来控制呈现的元素的HTML属性。例如,如果我想更改宽度和高度:
class DrumDataForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(DrumDataForm, self).__init__(*args, **kwargs)
self.fields['drum_photo'] = forms.FileUploadField(
widget = forms.ClearableFileInput(
attrs={'width': 200,
'height': 300}))
class Meta:
model = UserProfile
如果您希望在表单字段上具有更多样式灵活性,请参阅新的form assets部分,该部分允许您自定义用于样式表单样式的CSS。
要进行更多自定义,您可以subclassing the base widget classes创建自己的小部件;或者使用像django-crispy-forms这样的第三方库。