如何更改模板?

时间:2014-05-25 04:46:17

标签: python django

请帮助解决问题。

我制作了一张上传照片的表格。

模特:

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>

问题是我需要更改布局(添加或删除一些元素)。请告诉我你在哪里存储需要更改的模板?

1 个答案:

答案 0 :(得分:0)

我认为你要问的是呈现表单字段的模板在哪里。这由小部件控制,用于渲染字段。

django表单字段包含两件事:

  1. 的widget
  2. 验证
  3. 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这样的第三方库。