如何设计 Django 的文件选择器表单按钮的样式?
How can you style Django's file picker form button?
我正在尝试设置我的 Django 文件上传按钮 的样式,但是由于它是通过表单处理的并且没有明确写入模板中的 HTML 我无法设置样式它直接用 HTML 和 CSS 就像我可以为输入类型的其他按钮一样。
我试图在我的 forms.py
中添加我的 CSS class,但它将普通的默认 Django 文件上传按钮放在我的 CSS 之上样式按钮。
我的代码如下:
class FileUploadForm(forms.Form):
docFile = forms.FileField(
label = "Select a CSV file",
)
class Meta:
model = FileUpload
fields = ('docFile')
def __init__(self, *args, **kwargs):
super(FileUploadForm, self).__init__(*args, **kwargs)
self.fields['docFile'].widget.attrs.update({'class': 'my_class'})
我也试过在我的 Meta
class 中定义一个 widget
像这样:
class Meta:
model = FileUpload
widgets = {
'docFile': forms.FileInput(attrs={'class': 'my_class'}),
}
但这与我第一次尝试的效果相同。
是否有不同的方法来完成此操作,或者您是否可以在我的代码中发现一些逻辑错误?
如果您想为文件上传按钮设置样式,请定义另一个按钮或 link 并为其设置样式。然后设置它的点击事件触发文件上传按钮。
HTML:
<div>
<a id="browse" class="my_class">Browse</a>
<input type="file" name="data" style="display: none" />
</div>
Javascript:
$('#browse').click(function(){
$(this).parent().find('input').click();
});
要以 Django 形式完成这项工作,您可以通过 widget.
为了后代,这里是我使用 Bootstrap here.
找到的解决方案
.fileUpload {
position: relative;
overflow: hidden;
margin: 10px;
}
.fileUpload input.upload {
position: absolute;
top: 0;
right: 0;
margin: 0;
padding: 0;
font-size: 20px;
cursor: pointer;
opacity: 0;
filter: alpha(opacity=0);
}
<link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet"/>
<div class="fileUpload btn btn-primary">
<span>Upload</span>
<input type="file" class="upload" />
</div>
我正在尝试设置我的 Django 文件上传按钮 的样式,但是由于它是通过表单处理的并且没有明确写入模板中的 HTML 我无法设置样式它直接用 HTML 和 CSS 就像我可以为输入类型的其他按钮一样。
我试图在我的 forms.py
中添加我的 CSS class,但它将普通的默认 Django 文件上传按钮放在我的 CSS 之上样式按钮。
我的代码如下:
class FileUploadForm(forms.Form):
docFile = forms.FileField(
label = "Select a CSV file",
)
class Meta:
model = FileUpload
fields = ('docFile')
def __init__(self, *args, **kwargs):
super(FileUploadForm, self).__init__(*args, **kwargs)
self.fields['docFile'].widget.attrs.update({'class': 'my_class'})
我也试过在我的 Meta
class 中定义一个 widget
像这样:
class Meta:
model = FileUpload
widgets = {
'docFile': forms.FileInput(attrs={'class': 'my_class'}),
}
但这与我第一次尝试的效果相同。
是否有不同的方法来完成此操作,或者您是否可以在我的代码中发现一些逻辑错误?
如果您想为文件上传按钮设置样式,请定义另一个按钮或 link 并为其设置样式。然后设置它的点击事件触发文件上传按钮。
HTML:
<div>
<a id="browse" class="my_class">Browse</a>
<input type="file" name="data" style="display: none" />
</div>
Javascript:
$('#browse').click(function(){
$(this).parent().find('input').click();
});
要以 Django 形式完成这项工作,您可以通过 widget.
为了后代,这里是我使用 Bootstrap here.
找到的解决方案.fileUpload {
position: relative;
overflow: hidden;
margin: 10px;
}
.fileUpload input.upload {
position: absolute;
top: 0;
right: 0;
margin: 0;
padding: 0;
font-size: 20px;
cursor: pointer;
opacity: 0;
filter: alpha(opacity=0);
}
<link href="http://netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet"/>
<div class="fileUpload btn btn-primary">
<span>Upload</span>
<input type="file" class="upload" />
</div>