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>
我的是导入表格没显示也没有报错