Buttons

You can create buttons using cwf.admin.Button and cwf.admin.ButtonGroup classes where a ButtonGroup is merely a container of multiple Button.

A ButtonGroup takes in a name and an iterable of buttons. A Button takes in a url fragment and the desc of the button (the name that should be displayed for that button when rendered as html).

Both Button and ButtonGroup also take in keyword arguments as listed below

Button Options

Button and ButtonGroup have the following options.

kls

Css class to give to the html representation of the button.

Defaults to None.

display

A boolean used to make a button not show

for_all

True if you want the button to appear in the changelist.

False if you want the button to appear in the changeform.

Defaults to False.

condition

A boolean or callable (accepting the instance of the button and instance of the model being edited).

This is used to say whether there is some condition against the button being shown.

new_window

Whether clicking the button opens the new request in a new window.

Defaults to False.

needs_auth

If a boolean, says whether request.user.is_authenticated() needs to be True or not.

If a string, or a list of strings, then the user must have all the permissions as specified by each string.

description

A long description for the button. Currently only used for buttons in a ButtonGroup

save_on_click

Whether to save the form before redirecting to the view for that button.

Note

This is set to False if you have for_all set to True.

need_super_user

Whether you need to be super user for this button to be visible

return_to_form

Whether to redirect straight back to the form after the button executes it’s view.

This works for both buttons that appear on change list and those that appear on the change form.

Note

When buttons are given to the template context so that they can be rendered by the template, they are first wrapped in a cwf.admin.buttons.ButtonWrap which is a container that holds the button , the request context, and the the object being edited.

This container proxies to the button and also provides some functions that interpret the options on the button against the request for the convenience of the template.

Button Html

When rendering a button, you have button.html available, which will return the html that can be used to represent the button.

If the button has the save_on_click option, then it is rendered as an “<input>” box that will submit the form before going into it’s own view , thus effectively saving the modifications you’ve made to the form before doing anything else.

Otherwise, the button is rendered as an “<a>”.

If you use the templates provided, then it will also make sure that the buttons that save the form are put at the bottom of the page near the default “save” buttons that the admin provides.

Whereas buttons that don’t save the form will appear at the top next to where the admin already provides a button to see the history for an object.

Due to the css that the admin provides, these buttons will also have distinct looks that signify this difference.