Skip to main content
 首页 » 编程设计

python之Django 只上传 csv 文件

2025年05月04日41zhengyun_ustc

我正在尝试导入 csv 文件,我可以毫无问题地导入,但目前的功能接受所有文件类型,我希望该功能只接受 csv 文件。下面是 view.py 和模板文件。

我的应用/views.py

def list(request): 
    # Handle file upload 
    if request.method == 'POST': 
        form = DocumentForm(request.POST, request.FILES) 
        if form.is_valid(): 
            importing_file(request.FILES['docfile']) 

myapp/templates/myapp/index.html

 <form action="{% url 'ml:list' %}" method="post" enctype="multipart/form-data"> 
            {% csrf_token %} 
            <p>{{ form.non_field_errors }}</p> 
 
            <p>{{ form.docfile.label_tag }} {{ form.docfile.help_text }}</p> 
 
            <p> 
                {{ form.docfile.errors }} 
                {{ form.docfile }} 
            </p> 
 
            <p><input type="submit" value="Upload"/></p> 
        </form> 

EDIT

I could find a workaround by adding validate_file_extension as per the django documentation

myapp/forms.py

def validate_file_extension(value): 
        if not value.name.endswith('.csv'): 
            raise forms.ValidationError("Only CSV file is accepted") 
class DocumentForm(forms.Form):  
    docfile = forms.FileField(label='Select a file',validators=[validate_file_extension]) 

请您参考如下方法:

用于验证文件扩展名的表单小部件

csv_file = forms.FileField(widget=forms.FileInput(attrs={'accept': ".csv"}))