# Description This tutorial shows to you an example of Rougail use on how to set a proxy in the Mozilla Firefox browser. More precisely, this tutorial aims at reproducing this [Mozilla Firefox](https://www.mozilla.org/firefox/new/) settings page: ![Firefox Proxy setting](firefox.png) And the integration of part of the [Firefox FoxyProxy plugin](https://addons.mozilla.org/firefox/addon/foxyproxy-standard/). The idea is to have a namespace specific to FoxyProxy and to find in it part of the settings that we will have made in the main namespace. This is what the page looks like: ![Foxyproxy Proxy setting](foxyproxy.png) # Installation To test this tutorial, you need to download this repository and install Rougail: ```bash git clone -b 1.1 https://forge.cloud.silique.fr/stove/rougail-tutorials.git cd rougail-tutorials python -m venv venv_rougail . venv_rougail/bin/activate pip install rougail-cli rougail-output-exporter rougail-output-doc rougail-user-data-yaml ``` # Summary Each step is a separerate commit. You can navigate to history to discover different aspect to the Rougail format. - Getting started ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/preliminary.html)) - [[tutorial v1.1_000] Creating a structure file](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_000/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/preliminary.html#creating-a-structure-file) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_000~1..v1.1_000)) - [[tutorial v1.1_001] Let’s add our first variable](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_001/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/preliminary.html#let-s-add-our-first-variable) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_001~1..v1.1_001)) - [[tutorial v1.1_002] Describe the variable](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_002/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/preliminary.html#describe-the-variable) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_002~1..v1.1_002)) - [[tutorial v1.1_003] Set a default value](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_003/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/preliminary.html#set-a-default-value) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_003~1..v1.1_003)) - A variable with possible values ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/choice.html)) - [[tutorial v1.1_010] A variable with a list of possible values](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_010/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/choice.html#a-variable-with-a-list-of-possible-values) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_010~1..v1.1_010)) - Group variables inside families ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/family.html)) - [[tutorial v1.1_020] Creating a new family](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_020/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/family.html#creating-a-new-family) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_020~1..v1.1_020)) - [[tutorial v1.1_021] Or a sub family](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_021/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/family.html#or-a-sub-family) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_021~1..v1.1_021)) - [[tutorial v1.1_022] Putting a variable inside of a family or a sub family](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_022/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/family.html#putting-a-variable-inside-of-a-family-or-a-sub-family) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_022~1..v1.1_022)) - Some suitable types ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/types.html)) - [[tutorial v1.1_030] A variable with type "domainname"](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_030/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/types.html#a-variable-with-type-domainname) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_030~1..v1.1_030)) - [[tutorial v1.1_031] A variable with type’s parameters](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_031/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/types.html#a-variable-with-type-s-parameters) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_031~1..v1.1_031)) - [[tutorial v1.1_032] A variable with type "port"](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_032/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/types.html#a-variable-with-type-port) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_032~1..v1.1_032)) - [[tutorial v1.1_033] A variable with type "boolean"](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_033/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/types.html#a-variable-with-type-boolean) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_033~1..v1.1_033)) - Calculated default value for a variable ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/properties.html)) - [[tutorial v1.1_040] HTTPS family](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_040/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/properties.html#https-family) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_040~1..v1.1_040)) - [[tutorial v1.1_041] A default value calculated from another variable](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_041/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/properties.html#a-default-value-calculated-from-another-variable) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_041~1..v1.1_041)) - Define access to variable or family ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/properties.html)) - [[tutorial v1.1_050] A disabled family](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_050/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/properties.html#a-disabled-family) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_050~1..v1.1_050)) - [[tutorial v1.1_051] A conditional disabled family](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_051/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/properties.html#a-conditional-disabled-family) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_051~1..v1.1_051)) - [[tutorial v1.1_052] A hidden family](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_052/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/properties.html#a-hidden-family) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_052~1..v1.1_052)) - [[tutorial v1.1_053] A conditional hidden family](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_053/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/properties.html#a-conditional-hidden-family) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_053~1..v1.1_053)) - A dynamically built family ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/dynfam.html)) - [[tutorial v1.1_060] A dynamically built family](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_060/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/dynfam.html#a-dynamically-built-family) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_060~1..v1.1_060)) - [[tutorial v1.1_061] A conditional disabled variable with dynamic identifier](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_061/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/dynfam.html#a-conditional-disabled-variable-with-dynamic-identifier) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_061~1..v1.1_061)) - Playing with Jinja ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html)) - [[tutorial v1.1_070] A conditional hidden family with Jinja](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_070/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#a-conditional-hidden-family-with-jinja) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_070~1..v1.1_070)) - [[tutorial v1.1_071] Jinja with a description](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_071/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#jinja-with-a-description) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_071~1..v1.1_071)) - [[tutorial v1.1_072] Jinja with a parameter](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_072/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#jinja-with-a-parameter) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_072~1..v1.1_072)) - [[tutorial v1.1_073] Jinja could returns a boolean](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_073/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#jinja-could-returns-a-boolean) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_073~1..v1.1_073)) - Custom type ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html)) - [[tutorial v1.1_080] HTTP Proxy with "proxy" type](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_080/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#http-proxy-with-proxy-type) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_080~1..v1.1_080)) - [[tutorial v1.1_081] HTTPS and SOCKS Proxy](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_081/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#https-and-socks-proxy) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_081~1..v1.1_081)) - A web_address variable ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html)) - [[tutorial v1.1_090] A conditional disabled variable with type web_address](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_090/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#a-conditional-disabled-variable-with-type-web_address) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_090~1..v1.1_090)) - A full documented variable with multiple values and not mandatory ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html)) - [[tutorial v1.1_100] A conditional disabled variable with type domainname and parameters](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_100/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#a-conditional-disabled-variable-with-type-domainname-and-parameters) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_100~1..v1.1_100)) - [[tutorial v1.1_101] A variable with multiple value](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_101/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#a-variable-with-multiple-value) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_101~1..v1.1_101)) - [[tutorial v1.1_102] A non mandatory variable](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_102/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#a-non-mandatory-variable) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_102~1..v1.1_102)) - [[tutorial v1.1_103] Examples](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_103/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#examples) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_103~1..v1.1_103)) - [[tutorial v1.1_104] Help](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_104/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#help) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_104~1..v1.1_104)) - Practice ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html)) - [[tutorial v1.1_110] A conditional disabled boolean variable](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_110/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#a-conditional-disabled-boolean-variable) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_110~1..v1.1_110)) - [[tutorial v1.1_111] A boolean variable](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_111/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#a-boolean-variable) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_111~1..v1.1_111)) - [[tutorial v1.1_112] A Jinja conditional disabled boolean variable](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_112/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#a-jinja-conditional-disabled-boolean-variable) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_112~1..v1.1_112)) - The Jinja propertyerror filter ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html)) - [[tutorial v1.1_120] Disabled a variable when an other variable are disabled](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_120/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#disabled-a-variable-when-an-other-variable-are-disabled) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_120~1..v1.1_120)) - Mode ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html)) - [[tutorial v1.1_130] A variable in avanced mode](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_130/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#a-variable-in-avanced-mode) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_130~1..v1.1_130)) - Practice ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html)) - [[tutorial v1.1_140] A boolean variable](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_140/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#a-boolean-variable) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_140~1..v1.1_140)) - [[tutorial v1.1_141] A choice variable](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_141/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#a-choice-variable) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_141~1..v1.1_141)) - [[tutorial v1.1_142] A web_address variable ](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_142/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#a-web_address-variable) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_142~1..v1.1_142)) - Validators ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html)) - [[tutorial v1.1_150] A variable with custom validation](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_150/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#a-variable-with-custom-validation) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_150~1..v1.1_150)) - Namespace ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html)) - [[tutorial v1.1_160] Namespace](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_160/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#namespace) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_160~1..v1.1_160)) - [[tutorial v1.1_161] New "FoxyProxy" namespace](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_161/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#new-foxyproxy-namespace) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_161~1..v1.1_161)) - A leadership family ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html)) - [[tutorial v1.1_170] A leadership family](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_170/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#a-leadership-family) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_170~1..v1.1_170)) - Regexp type with calculation ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html)) - [[tutorial v1.1_180] Regexp type](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_180/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#regexp-type) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_180~1..v1.1_180)) - [[tutorial v1.1_181] Calculate a random color](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_181/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#calculate-a-random-color) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_181~1..v1.1_181)) - [[tutorial v1.1_182] Auto save value](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_182/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#auto-save-value) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_182~1..v1.1_182)) - A variable name with a known variable's attribute ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html)) - [[tutorial v1.1_190] A variable name that conflict with a known the variable's attribute "type"](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_190/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#a-variable-name-that-conflict-with-a-known-the-variable's-attribute-type) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_190~1..v1.1_190)) - Variable calculation with propertyerror ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html)) - [[tutorial v1.1_200] Variable calculation with propertyerror](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_200/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#variable-calculation-with-propertyerror) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_200~1..v1.1_200)) - Redefine variable ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html)) - [[tutorial v1.1_210] Username is mandatory if a password is set](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_210/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#username-is-mandatory-if-a-password-is-set) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_210~1..v1.1_210)) - [[tutorial v1.1_211] redefines the behavior to password mandatory if the user is defined](https://forge.cloud.silique.fr/stove/rougail-tutorials/src/commit/v1.1_211/README.md) ([doc](https://pedago.gwenaelremond.fr/bribes/rougail/tutorial/jinja.html#redefines-the-behavior-to-password-mandatory-if-the-user-is-defined) - [diff](https://forge.cloud.silique.fr/stove/rougail-tutorials/compare/v1.1_211~1..v1.1_211))