| 152 | === Implementing `IAdminPanelProvider` and `IPreferencePanelProvider` #PanelProviders |
| 153 | |
| 154 | Plugins which implement custom admin or preference panels must follow the same conventions in `render_admin_panel` and `render_preference_panel` as the ones explained above for [#IRequestHandler IRequestHandler.process_request]: |
| 155 | - a return value of `(template, data)` means that `template` is the name of a Jinja2 template |
| 156 | - a return value of `(template, data, None)` means that `template` in this case is the name of a Genshi template |
| 157 | |
| 158 | The only "problem" is that in this specific case, the legacy API for the return value was also `(template, data)`. So in this case, the return value needs to be changed if the template remains a Genshi template. |
| 159 | |
| 160 | See for example [TH16217] (TH:FullBlogPlugin) and below in [#i18n] (SpamFilter). |