How to easily add some STYLE to your QGIS Server WMS GetFeatureInfo response by using the new Python plugins.
There have been some requests in the past about custom CSS for html GetFeatureInfo responses from QGIS Server. Currently, the HTML response template is hardcoded and there is no way to customize it, the Python plugin support introduced with the latest version of QGIS Server provides an easy way to add some custom CSS rules or even provide custom templates. To get you started, I’ve added a new filter to my example HelloServer plugin:import os from qgis.server import * from qgis.core import * from PyQt4.QtCore import * from PyQt4.QtGui import * class GetFeatureInfoCSSFilter(QgsServerFilter): def __init__(self, serverIface): super(GetFeatureInfoCSSFilter, self).__init__(serverIface) def requestReady(self): """Nothing to do here, but it would be the ideal point to alter request **before** it gets processed, for example you could set INFO_FORMAT to text/xml to get XML instead of HTML in responseComplete""" pass def responseComplete(self): request = self.serverInterface().requestHandler() params = request.parameterMap( ) if (params.get('SERVICE').upper() == 'WMS' \ and params.get('REQUEST', '').upper() == 'GETFEATUREINFO' \ and params.get('INFO_FORMAT', '').upper() == 'TEXT/HTML' \ and not request.exceptionRaised() ): body = request.body() body.replace('<BODY>', """<BODY><STYLE type="text/css">* {font-family: arial, sans-serif; color: blue;}</STYLE>""") # Set the body request.clearBody() request.appendBody(body)This filter is pretty simple, if the request is a WMS
GetFeatureInfo
with HTML
format, it injects a STYLE
tag into the HTML
HEAD
.
Here is the output with blue color and arial fonts applied:
As an exercise left to the reader, you can also intercept the call in requestReady(self)
, change the INFO_FORMAT to text/xml
and then do some real templating, for example by using XSLT
or by parsing the XML
and injecting the values into a custom template.