Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
F
flask-admin
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
JIRA
JIRA
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Python-Dev
flask-admin
Commits
7cf4f4f9
Commit
7cf4f4f9
authored
Feb 17, 2016
by
Paul Brown
Committed by
Iuri de Silvio
Feb 17, 2016
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add the ability to add multiple export types, remove unnecessary expose and consolidate return_url
parent
a8e8a535
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
61 additions
and
27 deletions
+61
-27
base.py
flask_admin/model/base.py
+17
-21
layout.html
flask_admin/templates/bootstrap2/admin/model/layout.html
+21
-0
list.html
flask_admin/templates/bootstrap2/admin/model/list.html
+1
-3
layout.html
flask_admin/templates/bootstrap3/admin/model/layout.html
+21
-0
list.html
flask_admin/templates/bootstrap3/admin/model/list.html
+1
-3
No files found.
flask_admin/model/base.py
View file @
7cf4f4f9
...
@@ -688,10 +688,10 @@ class BaseModelView(BaseView, ActionsMixin):
...
@@ -688,10 +688,10 @@ class BaseModelView(BaseView, ActionsMixin):
Unlimited by default. Uses `page_size` if set to `None`.
Unlimited by default. Uses `page_size` if set to `None`.
"""
"""
export_type
=
'csv'
export_type
s
=
[
'csv'
]
"""
"""
Export type, `csv` as default and can be changed to any tablib
A list of available export filetypes. `csv` only is default, but any
supported type
.
filetypes supported by tablib can be used
.
Check tablib for https://github.com/kennethreitz/tablib/bloab/master/README.rst
Check tablib for https://github.com/kennethreitz/tablib/bloab/master/README.rst
for supported types.
for supported types.
...
@@ -2049,22 +2049,21 @@ class BaseModelView(BaseView, ActionsMixin):
...
@@ -2049,22 +2049,21 @@ class BaseModelView(BaseView, ActionsMixin):
@
expose
(
'/export/<export_type>/'
)
@
expose
(
'/export/<export_type>/'
)
def
export
(
self
,
export_type
):
def
export
(
self
,
export_type
):
if
export_type
==
'csv'
:
return
self
.
export_csv
()
else
:
return
self
.
_export_tablib
(
export_type
)
@
expose
(
'/export/csv/'
)
def
export_csv
(
self
):
"""
Export a CSV of records.
"""
return_url
=
get_redirect_target
()
or
self
.
get_url
(
'.index_view'
)
return_url
=
get_redirect_target
()
or
self
.
get_url
(
'.index_view'
)
if
not
self
.
can_export
:
if
not
self
.
can_export
or
(
export_type
not
in
self
.
export_types
)
:
flash
(
gettext
(
'Permission denied.'
))
flash
(
gettext
(
'Permission denied.'
))
return
redirect
(
return_url
)
return
redirect
(
return_url
)
if
export_type
==
'csv'
:
return
self
.
_export_csv
(
return_url
)
else
:
return
self
.
_export_tablib
(
export_type
,
return_url
)
def
_export_csv
(
self
,
return_url
):
"""
Export a CSV of records as a stream.
"""
count
,
data
=
self
.
_export_data
()
count
,
data
=
self
.
_export_data
()
# https://docs.djangoproject.com/en/1.8/howto/outputting-csv/
# https://docs.djangoproject.com/en/1.8/howto/outputting-csv/
...
@@ -2102,17 +2101,14 @@ class BaseModelView(BaseView, ActionsMixin):
...
@@ -2102,17 +2101,14 @@ class BaseModelView(BaseView, ActionsMixin):
mimetype
=
'text/csv'
mimetype
=
'text/csv'
)
)
def
_export_tablib
(
self
,
export_type
):
def
_export_tablib
(
self
,
export_type
,
return_url
):
return_url
=
get_redirect_target
()
or
self
.
get_url
(
'.index_view'
)
"""
Exports a variety of formats using the tablib library.
"""
if
tablib
is
None
:
if
tablib
is
None
:
flash
(
gettext
(
'Tablib dependency not installed.'
))
flash
(
gettext
(
'Tablib dependency not installed.'
))
return
redirect
(
return_url
)
return
redirect
(
return_url
)
if
not
self
.
can_export
:
flash
(
gettext
(
'Permission denied.'
))
return
redirect
(
return_url
)
filename
=
self
.
get_export_name
(
export_type
)
filename
=
self
.
get_export_name
(
export_type
)
disposition
=
'attachment;filename=
%
s'
%
(
secure_filename
(
filename
),)
disposition
=
'attachment;filename=
%
s'
%
(
secure_filename
(
filename
),)
...
...
flask_admin/templates/bootstrap2/admin/model/layout.html
View file @
7cf4f4f9
...
@@ -11,6 +11,27 @@
...
@@ -11,6 +11,27 @@
</ul>
</ul>
{% endmacro %}
{% endmacro %}
{% macro export_options(btn_class='dropdown-toggle') %}
{% if admin_view.export_types|length > 1 %}
<li
class=
"dropdown"
>
<a
class=
"{{ btn_class }}"
data-toggle=
"dropdown"
href=
"javascript:void(0)"
>
{{ _gettext('Export') }}
<b
class=
"caret"
></b>
</a>
<ul
class=
"dropdown-menu field-filters"
>
{% for export_type in admin_view.export_types %}
<li>
<a
href=
"{{ get_url('.export', export_type=export_type, **request.args) }}"
title=
"{{ _gettext('Export') }}"
>
{{ _gettext('Export') + ' ' + export_type|upper }}
</a>
</li>
{% endfor %}
</ul>
</li>
{% else %}
<li>
<a
href=
"{{ get_url('.export', export_type=admin_view.export_types[0], **request.args) }}"
title=
"{{ _gettext('Export') }}"
>
{{ _gettext('Export') }}
</a>
</li>
{% endif %}
{% endmacro %}
{% macro filter_form() %}
{% macro filter_form() %}
<form
id=
"filter_form"
method=
"GET"
action=
"{{ return_url }}"
>
<form
id=
"filter_form"
method=
"GET"
action=
"{{ return_url }}"
>
<div
class=
"pull-right"
>
<div
class=
"pull-right"
>
...
...
flask_admin/templates/bootstrap2/admin/model/list.html
View file @
7cf4f4f9
...
@@ -27,9 +27,7 @@
...
@@ -27,9 +27,7 @@
{% endif %}
{% endif %}
{% if admin_view.can_export %}
{% if admin_view.can_export %}
<li>
{{ model_layout.export_options() }}
<a
href=
"{{ get_url('.export', export_type=admin_view.export_type, **request.args) }}"
title=
"{{ _gettext('Export') }}"
>
{{ _gettext('Export') }}
</a>
</li>
{% endif %}
{% endif %}
{% block model_menu_bar_before_filters %}{% endblock %}
{% block model_menu_bar_before_filters %}{% endblock %}
...
...
flask_admin/templates/bootstrap3/admin/model/layout.html
View file @
7cf4f4f9
...
@@ -11,6 +11,27 @@
...
@@ -11,6 +11,27 @@
</ul>
</ul>
{% endmacro %}
{% endmacro %}
{% macro export_options(btn_class='dropdown-toggle') %}
{% if admin_view.export_types|length > 1 %}
<li
class=
"dropdown"
>
<a
class=
"{{ btn_class }}"
data-toggle=
"dropdown"
href=
"javascript:void(0)"
>
{{ _gettext('Export') }}
<b
class=
"caret"
></b>
</a>
<ul
class=
"dropdown-menu field-filters"
>
{% for export_type in admin_view.export_types %}
<li>
<a
href=
"{{ get_url('.export', export_type=export_type, **request.args) }}"
title=
"{{ _gettext('Export') }}"
>
{{ _gettext('Export') + ' ' + export_type|upper }}
</a>
</li>
{% endfor %}
</ul>
</li>
{% else %}
<li>
<a
href=
"{{ get_url('.export', export_type=admin_view.export_types[0], **request.args) }}"
title=
"{{ _gettext('Export') }}"
>
{{ _gettext('Export') }}
</a>
</li>
{% endif %}
{% endmacro %}
{% macro filter_form() %}
{% macro filter_form() %}
<form
id=
"filter_form"
method=
"GET"
action=
"{{ return_url }}"
>
<form
id=
"filter_form"
method=
"GET"
action=
"{{ return_url }}"
>
<div
class=
"pull-right"
>
<div
class=
"pull-right"
>
...
...
flask_admin/templates/bootstrap3/admin/model/list.html
View file @
7cf4f4f9
...
@@ -27,9 +27,7 @@
...
@@ -27,9 +27,7 @@
{% endif %}
{% endif %}
{% if admin_view.can_export %}
{% if admin_view.can_export %}
<li>
{{ model_layout.export_options() }}
<a
href=
"{{ get_url('.export', export_type=admin_view.export_type, **request.args) }}"
title=
"{{ _gettext('Export') }}"
>
{{ _gettext('Export') }}
</a>
</li>
{% endif %}
{% endif %}
{% block model_menu_bar_before_filters %}{% endblock %}
{% block model_menu_bar_before_filters %}{% endblock %}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment