By: Linto

Basic Qweb Operations


Qweb is a templating engine or reporting engine which can be used to create reports. Odoo uses Qweb for generating reports. Qweb provides several tools for creating a report. By using Qweb, we can manipulate the data very easily.

We will discuss the basic features available in Qweb for creating a report. We use XML attributes prefixed by ‘t-’ for performing the operations.
Just like any other programming language, we can define a new variable, assign a value to it, and use it in our template. 

How to define a variable

t-set can be used to define a new variable and set its value.

Syntax is,

<t t-set=”variable_name” t-value=”value of the variable” />


<t t-set=”count” t-value=”0” />  

This will create a new variable ‘count’ and set its value to zero. We can set the value of this variable using a function. 

<t t-set=”count” t-value=”my_function()” /> 

Here, the value of ‘count’ will be the value returned from the function ‘my_function’. When we define a variable, we don’t need to specify a specific type of this variable. We can have several types of values such as numbers, strings, arrays(lists) and dictionaries, etc. If we need to define a dictionary, we can achieve it like this,

<t t-set=”my_dict” t-value=”{'my': 'first', 'my2': 'second' }” /> 

Just like this, we can use lists also. Iterating over the different values of a list or dictionary can be achieved by using a loop.


In order to output a value, qweb provides t-esc and t-raw directives. The commonly used one is t-esc.

<t t-esc="value"/>

t-esc will evaluate the variable and print the content of that variable. The difference between t-esc and t-raw is, t-esc will automatically HTML-escape its content while t-raw won’t.

Conditional Operators

After setting a variable, we can perform our operations on that variable. We can use t-if to perform any conditional operations. The basic syntax is as follows. 

<t t-if=”condition”> <do your operations></t>


<t t-if=”count==0”><t t-set=”count” t-value=”1” /></t>
This will first check the value of ‘count’ is zero or not. If yes, the contents inside the t-if will be executed.

The ‘else’ condition can be achieved by using a ‘not’ before the condition in the t-if tag. The ‘not’ can be used to reverse the condition. i.e just like the else condition.


<t t-if=”not count==0”><t t-set=”count” t-value=”1” /></t>

If we need to include multiple conditions, we can achieve this by using ‘and’ or ‘or’. 

<t t-if=”not (count==0 or count ==1)”><t t-set=”count” t-value=”1” /></t>

In some cases, we may need to iterate over a set of values. Suppose we have a list or a dictionary with us and we need to iterate through each value, in this case, we can use t-for each for this purpose.


<t t-foreach=”[1,2,3]” t-as=”i”>
<t t-esc=”i” /> 

This will iterate over the list [1, 2, 3] and prints each element one by one.

Calling Other Templates

Calling other templates from qweb can be achieved using the t-call directive. This can be used for top-level rendering or within a template.

<t t-call="other_template"/>

Handling Fields

When we are handling fields, we can use a t-field directive ( the result of the browser method). t-field-options can be used for customizing these fields. The widget is one of the most common options used with t-field options. We can have different types of widgets for different types of values.

cybrosys youtube


Cybrosys Technologies Pvt. Ltd.
Neospace, Kinfra Techno Park
Kakkancherry, Calicut
Kerala, India - 673635


Cybrosys Limited
Alpha House,
100 Borough High Street, London,
SE1 1LB, United Kingdom


Cybrosys Technologies Pvt. Ltd.
1st Floor, Thapasya Building,
Infopark, Kakkanad,
Kochi, India - 682030.


Cybrosys Techno Solutions
The Estate, 8th Floor,
Dickenson Road,
Bangalore, India - 560042

Send Us A Message