.. _simple theme templates:
======================
Simple Theme Templates
======================
The simple template is complex, it consists of many different elements and also
uses macros and include statements.  The following is a rough overview that we
would like to give the developerat hand, details must still be taken from the
:origin:`sources `.
A :ref:`result item ` can be of different media types.  The media
type of a result is defined by the :py:obj:`result_type.Result.template`.  To
set another media-type as :ref:`template default`, the field ``template``
in the result item must be set to the desired type.
.. contents:: Contents
   :depth: 2
   :local:
   :backlinks: entry
.. _result template macros:
Result template macros
======================
.. _macro result_header:
``result_header``
-----------------
Execpt ``image.html`` and some others this macro is used in nearly all result
types in the :ref:`main result list`.
Fields used in the template :origin:`macro result_header
`:
url :  :py:class:`str`
  Link URL of the result item.
title :  :py:class:`str`
  Link title of the result item.
img_src, thumbnail : :py:class:`str`
  URL of a image or thumbnail that is displayed in the result item.
.. _macro result_sub_header:
``result_sub_header``
---------------------
Execpt ``image.html`` and some others this macro is used in nearly all result
types in the :ref:`main result list`.
Fields used in the template :origin:`macro result_sub_header
`:
publishedDate : :py:obj:`datetime.datetime`
  The date on which the object was published.
length: :py:obj:`time.struct_time`
  Playing duration in seconds.
views: :py:class:`str`
  View count in humanized number format.
author : :py:class:`str`
  Author of the title.
metadata : :py:class:`str`
  Miscellaneous metadata.
.. _engine_data:
``engine_data_form``
--------------------
The ``engine_data_form`` macro is used in :origin:`results,html
` in a HTML ```` element.  The
intention of this macro is to pass data of a engine from one :py:obj:`response
` to the :py:obj:`searx.search.SearchQuery`
of the next :py:obj:`request `.
To pass data, engine's response handler can append result items of typ
``engine_data``.  This is by example used to pass a token from the response to
the next request:
.. code:: python
   def response(resp):
       ...
       results.append({
          'engine_data': token,
          'key': 'next_page_token',
       })
       ...
       return results
   def request(query, params):
       page_token = params['engine_data'].get('next_page_token')
.. _main result list:
Main Result List
================
The **media types** of the **main result type** are the template files in
the :origin:`result_templates `.
.. _template default:
``default.html``
----------------
Displays result fields from:
- :ref:`macro result_header` and
- :ref:`macro result_sub_header`
Additional fields used in the :origin:`default.html
`:
content :  :py:class:`str`
  General text of the result item.
iframe_src : :py:class:`str`
  URL of an embedded ``