Browse Source

Allow category filtering in get_flashed_messages to allow rending categories in separate html blocks

pull/336/merge
Steven Osborn 13 years ago committed by Ron DuPlain
parent
commit
fa069f94de
  1. 23
      docs/patterns/flashing.rst
  2. 8
      flask/helpers.py

23
docs/patterns/flashing.rst

@ -117,3 +117,26 @@ categories. The loop looks slightly different in that situation then:
This is just one example of how to render these flashed messages. One
might also use the category to add a prefix such as
``<strong>Error:</strong>`` to the message.
Filtering Flash Messages
------------------------
.. versionadded:: 0.9
Optionally you can pass a list of categories which filters the results of
:func:`~flask.get_flashed_messages`. This is useful if you wish to
render each category in a separate block.
.. sourcecode:: html+jinja
{% with errors = get_flashed_messages(category_filter=["error"]) %}
{% if errors %}
<div class="errors">
<ul>
{% for message in messages %}
<li class="error">{{ message }}</li>
{% endfor %}
</ul>
</div>
{% endif %}
{% endwith %}

8
flask/helpers.py

@ -264,7 +264,7 @@ def flash(message, category='message'):
session.setdefault('_flashes', []).append((category, message))
def get_flashed_messages(with_categories=False):
def get_flashed_messages(with_categories=False, category_filter=[]):
"""Pulls all flashed messages from the session and returns them.
Further calls in the same request to the function will return
the same messages. By default just the messages are returned,
@ -282,12 +282,18 @@ def get_flashed_messages(with_categories=False):
.. versionchanged:: 0.3
`with_categories` parameter added.
.. versionchanged: 0.9
`category_filter` parameter added.
:param with_categories: set to `True` to also receive categories.
:param category_filter: whitelist of categories to limit return values
"""
flashes = _request_ctx_stack.top.flashes
if flashes is None:
_request_ctx_stack.top.flashes = flashes = session.pop('_flashes') \
if '_flashes' in session else []
if category_filter:
flashes = filter(lambda f: f[0] in category_filter, flashes)
if not with_categories:
return [x[1] for x in flashes]
return flashes

Loading…
Cancel
Save