Closes#2778
Extra ES params are now passed through new OPTIONS key in the
WAGTAILSEARCH_BACKENDS setting.
It's backward compatible: if no OPTIONS key is found and some parameters
still exist, those parameters are used for the ES constructor..
This makes sure the variable can't be printed in the template,
performing an accidental copy of the page. That also happened when using
the `{% print %}` tag from my django-debugtools package
When templates are rendered outside the request cycle,
the `settings` context processor fails because `request.site` is not
created because `SiteMiddleware` was not processed.
This happens whenever requests are mocked for rendering.
For example email rendering by third party packages or unittests
that mock a request object without taking all middleware into account.
A form field with multiple checkboxes may introduce submissions that have more than one value. The `send_email` function would loop through all form fields and grab only the first item of each field, ignoring fields that may have multiple values selected. This is a side effect of using `QueryDict.get()`, which will only return the last value of a list.
This commit fixes that by first converting the `QueryDict` instance to a regular dict of lists so that `get` will return all values, then joining multiple items if needed.
* `result_row_display` adds a `data-object_pk` attribute to each row, to make items easier to identify with JS
* Adds `get_extra_attrs_for_row()` method to `ModelAdmin`, to give developers a way of adding further attributes to the `<tr>` element