django xadmin 开启excel导入功能,请指教。
文件路径:xadmin/plugins/excel.py
from xadmin.sites import site from xadmin.views import BaseAdminPlugin, ListAdminView from django.template import loader from xadmin.plugins.utils import get_context_dict #excel 导入 class ListImportExcelPlugin(BaseAdminPlugin): import_excel = False def init_request(self, *args, **kwargs): return bool(self.import_excel) def block_top_toolbar(self, context, nodes): nodes.append(loader.render_to_string('xadmin/excel/model_list.top_toolbar.import.html', context=get_context_dict(context))) site.register_plugin(ListImportExcelPlugin, ListAdminView)
模版文件:xadmin/templates/xadmin/excel/model_list.top_toolbar.import.html
{% load i18n %}
<div class="btn-group export">
<a class="dropdown-toggle btn btn-default btn-sm" data-toggle="dropdown" href="#">
<i class="icon-share"></i> 导入1 <span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu" aria-labelledby="dLabel">
<li><a data-toggle="modal" data-target="#export-modal-import-excel"><i class="icon-circle-arrow-down"></i> 导入 Excel</a></li>
</ul>
<script>
function fileChange(target){
//检测上传文件的类型
var imgName = document.all.submit_upload.value;
var ext,idx;
if (imgName == ''){
document.all.submit_upload_b.disabled=true;
alert("请选择需要上传的 xls 文件!");
return;
} else {
idx = imgName.lastIndexOf(".");
if (idx != -1){
ext = imgName.substr(idx+1).toUpperCase();
ext = ext.toLowerCase( );
{# alert("ext="+ext);#}
if (ext != 'xls' && ext != 'xlsx'){
document.all.submit_upload_b.disabled=true;
alert("只能上传 .xls 类型的文件!");
return;
}
} else {
document.all.submit_upload_b.disabled=true;
alert("只能上传 .xls 类型的文件!");
return;
}
}
}
</script>
<div id="export-modal-import-excel" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<form method="post" action="" enctype="multipart/form-data">
{% csrf_token %}
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title">导入 Excel</h4>
</div>
<div class="modal-body">
<input type="file" onchange="fileChange(this)" name="excel" id="submit_upload">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">{% trans "Close" %}</button>
<button class="btn btn-success" type="submit" id="submit_upload_b"><i class="icon-share"></i> 导入</button>
</div>
</form>
</div><!-- /.modal-content -->
</div><!-- /.modal-dalog -->
</div><!-- /.modal -->
</div>
adminx.py文件
class maintenanceRecordListAdmin(object): list_display = [...] search_fields = [...] list_filter = [...] list_editable = [...] readonly_fields = [...] #excel导入导出功能 list_export = ['xls', 'xml', 'json'] import_excel = True def post(self, request, *args, **kwargs): # 导入逻辑 if 'excel' in request.FILES: pass return super(maintenanceRecordListAdmin, self).post(request, args, kwargs)
启动后,没有显示‘导入’ button, 求教
评论 2
<p>问题解决,plugins/<strong>init</strong>.py 注册自定义插件。</p> <div class="codehilite"><pre><span></span><span class="n">PLUGINS</span> <span class="o">=</span> <span class="p">(</span> <span class="o"></span><span class="c1">'..'</span> <span class="o"></span><span class="c1">'excel'</span> <span class="p">)</span>
<span class="k">def</span> <span class="nf">register_builtin_plugins</span><span class="p">(</span><span class="n">site</span><span class="p">):</span> <span class="kn">from</span> <span class="nn">importlib</span> <span class="kn">import</span> <span class="n">import_module</span> <span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span>
</pre></div>
我的是导入表格没显示也没有报错