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
08c4dfa3
Commit
08c4dfa3
authored
Dec 22, 2016
by
Sergey Shubin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implemented page size changeable by user
parent
d1191c27
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
63 additions
and
7 deletions
+63
-7
base.py
flask_admin/model/base.py
+29
-7
layout.html
flask_admin/templates/bootstrap2/admin/model/layout.html
+11
-0
list.html
flask_admin/templates/bootstrap2/admin/model/list.html
+6
-0
layout.html
flask_admin/templates/bootstrap3/admin/model/layout.html
+11
-0
list.html
flask_admin/templates/bootstrap3/admin/model/list.html
+6
-0
No files found.
flask_admin/model/base.py
View file @
08c4dfa3
...
@@ -42,8 +42,9 @@ class ViewArgs(object):
...
@@ -42,8 +42,9 @@ class ViewArgs(object):
"""
"""
List view arguments.
List view arguments.
"""
"""
def
__init__
(
self
,
page
=
None
,
sort
=
None
,
sort_desc
=
None
,
search
=
None
,
filters
=
None
,
extra_args
=
None
):
def
__init__
(
self
,
page
=
None
,
page_size
=
None
,
sort
=
None
,
sort_desc
=
None
,
search
=
None
,
filters
=
None
,
extra_args
=
None
):
self
.
page
=
page
self
.
page
=
page
self
.
page_size
=
page_size
self
.
sort
=
sort
self
.
sort
=
sort
self
.
sort_desc
=
bool
(
sort_desc
)
self
.
sort_desc
=
bool
(
sort_desc
)
self
.
search
=
search
self
.
search
=
search
...
@@ -61,6 +62,7 @@ class ViewArgs(object):
...
@@ -61,6 +62,7 @@ class ViewArgs(object):
flt
=
None
flt
=
None
kwargs
.
setdefault
(
'page'
,
self
.
page
)
kwargs
.
setdefault
(
'page'
,
self
.
page
)
kwargs
.
setdefault
(
'page_size'
,
self
.
page_size
)
kwargs
.
setdefault
(
'sort'
,
self
.
sort
)
kwargs
.
setdefault
(
'sort'
,
self
.
sort
)
kwargs
.
setdefault
(
'sort_desc'
,
self
.
sort_desc
)
kwargs
.
setdefault
(
'sort_desc'
,
self
.
sort_desc
)
kwargs
.
setdefault
(
'search'
,
self
.
search
)
kwargs
.
setdefault
(
'search'
,
self
.
search
)
...
@@ -719,12 +721,17 @@ class BaseModelView(BaseView, ActionsMixin):
...
@@ -719,12 +721,17 @@ class BaseModelView(BaseView, ActionsMixin):
for supported types.
for supported types.
"""
"""
#
Various
settings
#
Pagination
settings
page_size
=
20
page_size
=
20
"""
"""
Default page size for pagination.
Default page size for pagination.
"""
"""
can_set_page_size
=
False
"""
Allows to select page size via dropdown list
"""
def
__init__
(
self
,
model
,
def
__init__
(
self
,
model
,
name
=
None
,
category
=
None
,
endpoint
=
None
,
url
=
None
,
static_folder
=
None
,
name
=
None
,
category
=
None
,
endpoint
=
None
,
url
=
None
,
static_folder
=
None
,
menu_class_name
=
None
,
menu_icon_type
=
None
,
menu_icon_value
=
None
):
menu_class_name
=
None
,
menu_icon_type
=
None
,
menu_icon_value
=
None
):
...
@@ -1646,6 +1653,7 @@ class BaseModelView(BaseView, ActionsMixin):
...
@@ -1646,6 +1653,7 @@ class BaseModelView(BaseView, ActionsMixin):
Return arguments from query string.
Return arguments from query string.
"""
"""
return
ViewArgs
(
page
=
request
.
args
.
get
(
'page'
,
0
,
type
=
int
),
return
ViewArgs
(
page
=
request
.
args
.
get
(
'page'
,
0
,
type
=
int
),
page_size
=
request
.
args
.
get
(
'page_size'
,
0
,
type
=
int
),
sort
=
request
.
args
.
get
(
'sort'
,
None
,
type
=
int
),
sort
=
request
.
args
.
get
(
'sort'
,
None
,
type
=
int
),
sort_desc
=
request
.
args
.
get
(
'desc'
,
None
,
type
=
int
),
sort_desc
=
request
.
args
.
get
(
'desc'
,
None
,
type
=
int
),
search
=
request
.
args
.
get
(
'search'
,
None
),
search
=
request
.
args
.
get
(
'search'
,
None
),
...
@@ -1668,6 +1676,9 @@ class BaseModelView(BaseView, ActionsMixin):
...
@@ -1668,6 +1676,9 @@ class BaseModelView(BaseView, ActionsMixin):
kwargs
=
dict
(
page
=
page
,
sort
=
view_args
.
sort
,
desc
=
desc
,
search
=
view_args
.
search
)
kwargs
=
dict
(
page
=
page
,
sort
=
view_args
.
sort
,
desc
=
desc
,
search
=
view_args
.
search
)
kwargs
.
update
(
view_args
.
extra_args
)
kwargs
.
update
(
view_args
.
extra_args
)
if
view_args
.
page_size
:
kwargs
[
'page_size'
]
=
view_args
.
page_size
if
view_args
.
filters
:
if
view_args
.
filters
:
for
i
,
pair
in
enumerate
(
view_args
.
filters
):
for
i
,
pair
in
enumerate
(
view_args
.
filters
):
idx
,
flt_name
,
value
=
pair
idx
,
flt_name
,
value
=
pair
...
@@ -1821,9 +1832,12 @@ class BaseModelView(BaseView, ActionsMixin):
...
@@ -1821,9 +1832,12 @@ class BaseModelView(BaseView, ActionsMixin):
if
sort_column
is
not
None
:
if
sort_column
is
not
None
:
sort_column
=
sort_column
[
0
]
sort_column
=
sort_column
[
0
]
# Get page size
page_size
=
view_args
.
page_size
or
self
.
page_size
# Get count and data
# Get count and data
count
,
data
=
self
.
get_list
(
view_args
.
page
,
sort_column
,
view_args
.
sort_desc
,
count
,
data
=
self
.
get_list
(
view_args
.
page
,
sort_column
,
view_args
.
sort_desc
,
view_args
.
search
,
view_args
.
filters
)
view_args
.
search
,
view_args
.
filters
,
page_size
=
page_size
)
list_forms
=
{}
list_forms
=
{}
if
self
.
column_editable_list
:
if
self
.
column_editable_list
:
...
@@ -1831,9 +1845,9 @@ class BaseModelView(BaseView, ActionsMixin):
...
@@ -1831,9 +1845,9 @@ class BaseModelView(BaseView, ActionsMixin):
list_forms
[
self
.
get_pk_value
(
row
)]
=
self
.
list_form
(
obj
=
row
)
list_forms
[
self
.
get_pk_value
(
row
)]
=
self
.
list_form
(
obj
=
row
)
# Calculate number of pages
# Calculate number of pages
if
count
is
not
None
and
self
.
page_size
:
if
count
is
not
None
and
page_size
:
num_pages
=
int
(
ceil
(
count
/
float
(
self
.
page_size
)))
num_pages
=
int
(
ceil
(
count
/
float
(
page_size
)))
elif
not
self
.
page_size
:
elif
not
page_size
:
num_pages
=
0
# hide pager for unlimited page_size
num_pages
=
0
# hide pager for unlimited page_size
else
:
else
:
num_pages
=
None
# use simple pager
num_pages
=
None
# use simple pager
...
@@ -1852,6 +1866,12 @@ class BaseModelView(BaseView, ActionsMixin):
...
@@ -1852,6 +1866,12 @@ class BaseModelView(BaseView, ActionsMixin):
return
self
.
_get_list_url
(
view_args
.
clone
(
sort
=
column
,
sort_desc
=
desc
))
return
self
.
_get_list_url
(
view_args
.
clone
(
sort
=
column
,
sort_desc
=
desc
))
def
page_size_url
(
s
):
if
not
s
:
s
=
self
.
page_size
return
self
.
_get_list_url
(
view_args
.
clone
(
page_size
=
s
))
# Actions
# Actions
actions
,
actions_confirmation
=
self
.
get_actions_list
()
actions
,
actions_confirmation
=
self
.
get_actions_list
()
...
@@ -1877,8 +1897,10 @@ class BaseModelView(BaseView, ActionsMixin):
...
@@ -1877,8 +1897,10 @@ class BaseModelView(BaseView, ActionsMixin):
count
=
count
,
count
=
count
,
pager_url
=
pager_url
,
pager_url
=
pager_url
,
num_pages
=
num_pages
,
num_pages
=
num_pages
,
can_set_page_size
=
self
.
can_set_page_size
,
page_size_url
=
page_size_url
,
page
=
view_args
.
page
,
page
=
view_args
.
page
,
page_size
=
self
.
page_size
,
page_size
=
page_size
,
# Sorting
# Sorting
sort_column
=
view_args
.
sort
,
sort_column
=
view_args
.
sort
,
...
...
flask_admin/templates/bootstrap2/admin/model/layout.html
View file @
08c4dfa3
...
@@ -68,3 +68,14 @@
...
@@ -68,3 +68,14 @@
{% endif %}
{% endif %}
</form>
</form>
{% endmacro %}
{% endmacro %}
{% macro page_size_form(generator, btn_class='dropdown-toggle') %}
<a
class=
"{{ btn_class }}"
data-toggle=
"dropdown"
href=
"javascript:void(0)"
>
{{ page_size }} {{ _gettext('items') }}
<b
class=
"caret"
></b>
</a>
<ul
class=
"dropdown-menu"
>
<li><a
href=
"{{ generator(20) }}"
>
20 {{ _gettext('items') }}
</a></li>
<li><a
href=
"{{ generator(50) }}"
>
50 {{ _gettext('items') }}
</a></li>
<li><a
href=
"{{ generator(100) }}"
>
100 {{ _gettext('items') }}
</a></li>
</ul>
{% endmacro %}
flask_admin/templates/bootstrap2/admin/model/list.html
View file @
08c4dfa3
...
@@ -39,6 +39,12 @@
...
@@ -39,6 +39,12 @@
</li>
</li>
{% endif %}
{% endif %}
{% if can_set_page_size %}
<li
class=
"dropdown"
>
{{ model_layout.page_size_form(page_size_url) }}
</li>
{% endif %}
{% if actions %}
{% if actions %}
<li
class=
"dropdown"
>
<li
class=
"dropdown"
>
{{ actionlib.dropdown(actions) }}
{{ actionlib.dropdown(actions) }}
...
...
flask_admin/templates/bootstrap3/admin/model/layout.html
View file @
08c4dfa3
...
@@ -66,3 +66,14 @@
...
@@ -66,3 +66,14 @@
{% endif %}
{% endif %}
</form>
</form>
{% endmacro %}
{% endmacro %}
{% macro page_size_form(generator, btn_class='dropdown-toggle') %}
<a
class=
"{{ btn_class }}"
data-toggle=
"dropdown"
href=
"javascript:void(0)"
>
{{ page_size }} {{ _gettext('items') }}
<b
class=
"caret"
></b>
</a>
<ul
class=
"dropdown-menu"
>
<li><a
href=
"{{ generator(20) }}"
>
20 {{ _gettext('items') }}
</a></li>
<li><a
href=
"{{ generator(50) }}"
>
50 {{ _gettext('items') }}
</a></li>
<li><a
href=
"{{ generator(100) }}"
>
100 {{ _gettext('items') }}
</a></li>
</ul>
{% endmacro %}
flask_admin/templates/bootstrap3/admin/model/list.html
View file @
08c4dfa3
...
@@ -39,6 +39,12 @@
...
@@ -39,6 +39,12 @@
</li>
</li>
{% endif %}
{% endif %}
{% if can_set_page_size %}
<li
class=
"dropdown"
>
{{ model_layout.page_size_form(page_size_url) }}
</li>
{% endif %}
{% if actions %}
{% if actions %}
<li
class=
"dropdown"
>
<li
class=
"dropdown"
>
{{ actionlib.dropdown(actions) }}
{{ actionlib.dropdown(actions) }}
...
...
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