mirror of https://github.com/pallets/flask.git
				
				
				
			Allow category filtering in get_flashed_messages to allow rending categories in separate html blocks
This commit is contained in:
		
							parent
							
								
									676b3a4c13
								
							
						
					
					
						commit
						fa069f94de
					
				| 
						 | 
					@ -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
 | 
					This is just one example of how to render these flashed messages.  One
 | 
				
			||||||
might also use the category to add a prefix such as
 | 
					might also use the category to add a prefix such as
 | 
				
			||||||
``<strong>Error:</strong>`` to the message.
 | 
					``<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 %}
 | 
				
			||||||
| 
						 | 
					@ -264,7 +264,7 @@ def flash(message, category='message'):
 | 
				
			||||||
    session.setdefault('_flashes', []).append((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.
 | 
					    """Pulls all flashed messages from the session and returns them.
 | 
				
			||||||
    Further calls in the same request to the function will return
 | 
					    Further calls in the same request to the function will return
 | 
				
			||||||
    the same messages.  By default just the messages are returned,
 | 
					    the same messages.  By default just the messages are returned,
 | 
				
			||||||
| 
						 | 
					@ -282,12 +282,18 @@ def get_flashed_messages(with_categories=False):
 | 
				
			||||||
    .. versionchanged:: 0.3
 | 
					    .. versionchanged:: 0.3
 | 
				
			||||||
       `with_categories` parameter added.
 | 
					       `with_categories` parameter added.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    .. versionchanged: 0.9
 | 
				
			||||||
 | 
					        `category_filter` parameter added.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    :param with_categories: set to `True` to also receive categories.
 | 
					    :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
 | 
					    flashes = _request_ctx_stack.top.flashes
 | 
				
			||||||
    if flashes is None:
 | 
					    if flashes is None:
 | 
				
			||||||
        _request_ctx_stack.top.flashes = flashes = session.pop('_flashes') \
 | 
					        _request_ctx_stack.top.flashes = flashes = session.pop('_flashes') \
 | 
				
			||||||
            if '_flashes' in session else []
 | 
					            if '_flashes' in session else []
 | 
				
			||||||
 | 
					    if category_filter:
 | 
				
			||||||
 | 
					        flashes = filter(lambda f: f[0] in category_filter, flashes)
 | 
				
			||||||
    if not with_categories:
 | 
					    if not with_categories:
 | 
				
			||||||
        return [x[1] for x in flashes]
 | 
					        return [x[1] for x in flashes]
 | 
				
			||||||
    return flashes
 | 
					    return flashes
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue