pythonjinja2

Jinja2 {% include file %} outside of search path doesn't work


This is an elementary issue which is probably related to Jinja2 PrefixLoader or ChoiceLoader.

On Python 3.6 we load with this command

jinja2.FileSystemLoader( searchpath= "\\template_folder\\")

On Windows 7, our file structure is as follows.

- folder_bbb
    * subfile.txt
- template_folder
     * template_file
     - folder_aaa
         * subfile.txt

From the template_file we are successful with this command

{% include "folder_aaa/subfile.txt" %} 

Now we wish to move the file one level up, and write

{% include "../folder_bbb/subfile.txt" %}

but that doesn't work, complaining file not found.

What is the correct way to write? Thanks.


Solution

  • You may specify all paths in the the loader

    jinja2.FileSystemLoader(["c:\\template_folder\\", "c:\\folder_bbb\\"])
    

    and refer the including block without a specific path

    {% include "subfile.txt" %} 
    

    The path will be searched in order so that as you say, moving the file one level up, the file will be found. (You need the template_folder path for the template itself.)