We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
${messages("xxx")} not working in post-list template
When I use ${messages("xxx")} tag inside post-list template. I get an error during site compilation.

Error message is the following : File "/opt/nikola/projects/konilabs-web/cache/.mako.tmp/post_list_thumb.tmpl.py", line 72, in render_content __M_writer(unicode(messages("Read More"))) TypeError: 'Undefined' object is not callable 


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `nikola/plugins/compile/rest/post_list.py`
Content:
```
1 # -*- coding: utf-8 -*-
2 
3 # Copyright © 2013-2015 Udo Spallek, Roberto Alsina and others.
4 
5 # Permission is hereby granted, free of charge, to any
6 # person obtaining a copy of this software and associated
7 # documentation files (the "Software"), to deal in the
8 # Software without restriction, including without limitation
9 # the rights to use, copy, modify, merge, publish,
10 # distribute, sublicense, and/or sell copies of the
11 # Software, and to permit persons to whom the Software is
12 # furnished to do so, subject to the following conditions:
13 #
14 # The above copyright notice and this permission notice
15 # shall be included in all copies or substantial portions of
16 # the Software.
17 #
18 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
19 # KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
20 # WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
21 # PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
22 # OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
23 # OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
24 # OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
25 # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26 
27 """Post list directive for reStructuredText."""
28 
29 from __future__ import unicode_literals
30 
31 import os
32 import uuid
33 import natsort
34 
35 from docutils import nodes
36 from docutils.parsers.rst import Directive, directives
37 
38 from nikola import utils
39 from nikola.plugin_categories import RestExtension
40 
41 # WARNING: the directive name is post-list
42 #          (with a DASH instead of an UNDERSCORE)
43 
44 
45 class Plugin(RestExtension):
46     """Plugin for reST post-list directive."""
47 
48     name = "rest_post_list"
49 
50     def set_site(self, site):
51         """Set Nikola site."""
52         self.site = site
53         directives.register_directive('post-list', PostList)
54         PostList.site = site
55         return super(Plugin, self).set_site(site)
56 
57 
58 class PostList(Directive):
59     """Provide a reStructuredText directive to create a list of posts.
60 
61     Post List
62     =========
63     :Directive Arguments: None.
64     :Directive Options: lang, start, stop, reverse, sort, tags, categories, slugs, all, template, id
65     :Directive Content: None.
66 
67     The posts appearing in the list can be filtered by options.
68     *List slicing* is provided with the *start*, *stop* and *reverse* options.
69 
70     The following not required options are recognized:
71 
72     ``start`` : integer
73         The index of the first post to show.
74         A negative value like ``-3`` will show the *last* three posts in the
75         post-list.
76         Defaults to None.
77 
78     ``stop`` : integer
79         The index of the last post to show.
80         A value negative value like ``-1`` will show every post, but not the
81         *last* in the post-list.
82         Defaults to None.
83 
84     ``reverse`` : flag
85         Reverse the order of the post-list.
86         Defaults is to not reverse the order of posts.
87 
88     ``sort``: string
89         Sort post list by one of each post's attributes, usually ``title`` or a
90         custom ``priority``.  Defaults to None (chronological sorting).
91 
92     ``tags`` : string [, string...]
93         Filter posts to show only posts having at least one of the ``tags``.
94         Defaults to None.
95 
96     ``categories`` : string [, string...]
97         Filter posts to show only posts having one of the ``categories``.
98         Defaults to None.
99 
100     ``slugs`` : string [, string...]
101         Filter posts to show only posts having at least one of the ``slugs``.
102         Defaults to None.
103 
104     ``all`` : flag
105         Shows all posts and pages in the post list.
106         Defaults to show only posts with set *use_in_feeds*.
107 
108     ``lang`` : string
109         The language of post *titles* and *links*.
110         Defaults to default language.
111 
112     ``template`` : string
113         The name of an alternative template to render the post-list.
114         Defaults to ``post_list_directive.tmpl``
115 
116     ``id`` : string
117         A manual id for the post list.
118         Defaults to a random name composed by 'post_list_' + uuid.uuid4().hex.
119     """
120 
121     option_spec = {
122         'start': int,
123         'stop': int,
124         'reverse': directives.flag,
125         'sort': directives.unchanged,
126         'tags': directives.unchanged,
127         'categories': directives.unchanged,
128         'slugs': directives.unchanged,
129         'all': directives.flag,
130         'lang': directives.unchanged,
131         'template': directives.path,
132         'id': directives.unchanged,
133     }
134 
135     def run(self):
136         """Run post-list directive."""
137         start = self.options.get('start')
138         stop = self.options.get('stop')
139         reverse = self.options.get('reverse', False)
140         tags = self.options.get('tags')
141         tags = [t.strip().lower() for t in tags.split(',')] if tags else []
142         categories = self.options.get('categories')
143         categories = [c.strip().lower() for c in categories.split(',')] if categories else []
144         slugs = self.options.get('slugs')
145         slugs = [s.strip() for s in slugs.split(',')] if slugs else []
146         show_all = self.options.get('all', False)
147         lang = self.options.get('lang', utils.LocaleBorg().current_lang)
148         template = self.options.get('template', 'post_list_directive.tmpl')
149         sort = self.options.get('sort')
150         if self.site.invariant:  # for testing purposes
151             post_list_id = self.options.get('id', 'post_list_' + 'fixedvaluethatisnotauuid')
152         else:
153             post_list_id = self.options.get('id', 'post_list_' + uuid.uuid4().hex)
154 
155         filtered_timeline = []
156         posts = []
157         step = -1 if reverse is None else None
158         if show_all is None:
159             timeline = [p for p in self.site.timeline]
160         else:
161             timeline = [p for p in self.site.timeline if p.use_in_feeds]
162 
163         if categories:
164             timeline = [p for p in timeline if p.meta('category', lang=lang).lower() in categories]
165 
166         for post in timeline:
167             if tags:
168                 cont = True
169                 tags_lower = [t.lower() for t in post.tags]
170                 for tag in tags:
171                     if tag in tags_lower:
172                         cont = False
173 
174                 if cont:
175                     continue
176 
177             filtered_timeline.append(post)
178 
179         if sort:
180             filtered_timeline = natsort.natsorted(filtered_timeline, key=lambda post: post.meta[lang][sort], alg=natsort.ns.F | natsort.ns.IC)
181 
182         for post in filtered_timeline[start:stop:step]:
183             if slugs:
184                 cont = True
185                 for slug in slugs:
186                     if slug == post.meta('slug'):
187                         cont = False
188 
189                 if cont:
190                     continue
191 
192             bp = post.translated_base_path(lang)
193             if os.path.exists(bp):
194                 self.state.document.settings.record_dependencies.add(bp)
195 
196             posts += [post]
197 
198         if not posts:
199             return []
200         self.state.document.settings.record_dependencies.add("####MAGIC####TIMELINE")
201 
202         template_data = {
203             'lang': lang,
204             'posts': posts,
205             # Need to provide str, not TranslatableSetting (Issue #2104)
206             'date_format': self.site.GLOBAL_CONTEXT.get('date_format')[lang],
207             'post_list_id': post_list_id,
208         }
209         output = self.site.template_system.render_template(
210             template, None, template_data)
211         return [nodes.raw('', output, format='html')]
212
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/nikola/plugins/compile/rest/post_list.py b/nikola/plugins/compile/rest/post_list.py
--- a/nikola/plugins/compile/rest/post_list.py
+++ b/nikola/plugins/compile/rest/post_list.py
@@ -205,6 +205,7 @@
             # Need to provide str, not TranslatableSetting (Issue #2104)
             'date_format': self.site.GLOBAL_CONTEXT.get('date_format')[lang],
             'post_list_id': post_list_id,
+            'messages': self.site.MESSAGES,
         }
         output = self.site.template_system.render_template(
             template, None, template_data)

{"golden_diff": "diff --git a/nikola/plugins/compile/rest/post_list.py b/nikola/plugins/compile/rest/post_list.py\n--- a/nikola/plugins/compile/rest/post_list.py\n+++ b/nikola/plugins/compile/rest/post_list.py\n@@ -205,6 +205,7 @@\n             # Need to provide str, not TranslatableSetting (Issue #2104)\n             'date_format': self.site.GLOBAL_CONTEXT.get('date_format')[lang],\n             'post_list_id': post_list_id,\n+            'messages': self.site.MESSAGES,\n         }\n         output = self.site.template_system.render_template(\n             template, None, template_data)\n", "issue": "${messages(\"xxx\")} not working in post-list template\nWhen I use ${messages(\"xxx\")} tag inside post-list template. I get an error during site compilation.\n\nError message is the following : File \"/opt/nikola/projects/konilabs-web/cache/.mako.tmp/post_list_thumb.tmpl.py\", line 72, in render_content __M_writer(unicode(messages(\"Read More\"))) TypeError: 'Undefined' object is not callable \n\n", "before_files": [{"content": "# -*- coding: utf-8 -*-\n\n# Copyright \u00a9 2013-2015 Udo Spallek, Roberto Alsina and others.\n\n# Permission is hereby granted, free of charge, to any\n# person obtaining a copy of this software and associated\n# documentation files (the \"Software\"), to deal in the\n# Software without restriction, including without limitation\n# the rights to use, copy, modify, merge, publish,\n# distribute, sublicense, and/or sell copies of the\n# Software, and to permit persons to whom the Software is\n# furnished to do so, subject to the following conditions:\n#\n# The above copyright notice and this permission notice\n# shall be included in all copies or substantial portions of\n# the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY\n# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\n# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\n# PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS\n# OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR\n# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\"\"\"Post list directive for reStructuredText.\"\"\"\n\nfrom __future__ import unicode_literals\n\nimport os\nimport uuid\nimport natsort\n\nfrom docutils import nodes\nfrom docutils.parsers.rst import Directive, directives\n\nfrom nikola import utils\nfrom nikola.plugin_categories import RestExtension\n\n# WARNING: the directive name is post-list\n#          (with a DASH instead of an UNDERSCORE)\n\n\nclass Plugin(RestExtension):\n    \"\"\"Plugin for reST post-list directive.\"\"\"\n\n    name = \"rest_post_list\"\n\n    def set_site(self, site):\n        \"\"\"Set Nikola site.\"\"\"\n        self.site = site\n        directives.register_directive('post-list', PostList)\n        PostList.site = site\n        return super(Plugin, self).set_site(site)\n\n\nclass PostList(Directive):\n    \"\"\"Provide a reStructuredText directive to create a list of posts.\n\n    Post List\n    =========\n    :Directive Arguments: None.\n    :Directive Options: lang, start, stop, reverse, sort, tags, categories, slugs, all, template, id\n    :Directive Content: None.\n\n    The posts appearing in the list can be filtered by options.\n    *List slicing* is provided with the *start*, *stop* and *reverse* options.\n\n    The following not required options are recognized:\n\n    ``start`` : integer\n        The index of the first post to show.\n        A negative value like ``-3`` will show the *last* three posts in the\n        post-list.\n        Defaults to None.\n\n    ``stop`` : integer\n        The index of the last post to show.\n        A value negative value like ``-1`` will show every post, but not the\n        *last* in the post-list.\n        Defaults to None.\n\n    ``reverse`` : flag\n        Reverse the order of the post-list.\n        Defaults is to not reverse the order of posts.\n\n    ``sort``: string\n        Sort post list by one of each post's attributes, usually ``title`` or a\n        custom ``priority``.  Defaults to None (chronological sorting).\n\n    ``tags`` : string [, string...]\n        Filter posts to show only posts having at least one of the ``tags``.\n        Defaults to None.\n\n    ``categories`` : string [, string...]\n        Filter posts to show only posts having one of the ``categories``.\n        Defaults to None.\n\n    ``slugs`` : string [, string...]\n        Filter posts to show only posts having at least one of the ``slugs``.\n        Defaults to None.\n\n    ``all`` : flag\n        Shows all posts and pages in the post list.\n        Defaults to show only posts with set *use_in_feeds*.\n\n    ``lang`` : string\n        The language of post *titles* and *links*.\n        Defaults to default language.\n\n    ``template`` : string\n        The name of an alternative template to render the post-list.\n        Defaults to ``post_list_directive.tmpl``\n\n    ``id`` : string\n        A manual id for the post list.\n        Defaults to a random name composed by 'post_list_' + uuid.uuid4().hex.\n    \"\"\"\n\n    option_spec = {\n        'start': int,\n        'stop': int,\n        'reverse': directives.flag,\n        'sort': directives.unchanged,\n        'tags': directives.unchanged,\n        'categories': directives.unchanged,\n        'slugs': directives.unchanged,\n        'all': directives.flag,\n        'lang': directives.unchanged,\n        'template': directives.path,\n        'id': directives.unchanged,\n    }\n\n    def run(self):\n        \"\"\"Run post-list directive.\"\"\"\n        start = self.options.get('start')\n        stop = self.options.get('stop')\n        reverse = self.options.get('reverse', False)\n        tags = self.options.get('tags')\n        tags = [t.strip().lower() for t in tags.split(',')] if tags else []\n        categories = self.options.get('categories')\n        categories = [c.strip().lower() for c in categories.split(',')] if categories else []\n        slugs = self.options.get('slugs')\n        slugs = [s.strip() for s in slugs.split(',')] if slugs else []\n        show_all = self.options.get('all', False)\n        lang = self.options.get('lang', utils.LocaleBorg().current_lang)\n        template = self.options.get('template', 'post_list_directive.tmpl')\n        sort = self.options.get('sort')\n        if self.site.invariant:  # for testing purposes\n            post_list_id = self.options.get('id', 'post_list_' + 'fixedvaluethatisnotauuid')\n        else:\n            post_list_id = self.options.get('id', 'post_list_' + uuid.uuid4().hex)\n\n        filtered_timeline = []\n        posts = []\n        step = -1 if reverse is None else None\n        if show_all is None:\n            timeline = [p for p in self.site.timeline]\n        else:\n            timeline = [p for p in self.site.timeline if p.use_in_feeds]\n\n        if categories:\n            timeline = [p for p in timeline if p.meta('category', lang=lang).lower() in categories]\n\n        for post in timeline:\n            if tags:\n                cont = True\n                tags_lower = [t.lower() for t in post.tags]\n                for tag in tags:\n                    if tag in tags_lower:\n                        cont = False\n\n                if cont:\n                    continue\n\n            filtered_timeline.append(post)\n\n        if sort:\n            filtered_timeline = natsort.natsorted(filtered_timeline, key=lambda post: post.meta[lang][sort], alg=natsort.ns.F | natsort.ns.IC)\n\n        for post in filtered_timeline[start:stop:step]:\n            if slugs:\n                cont = True\n                for slug in slugs:\n                    if slug == post.meta('slug'):\n                        cont = False\n\n                if cont:\n                    continue\n\n            bp = post.translated_base_path(lang)\n            if os.path.exists(bp):\n                self.state.document.settings.record_dependencies.add(bp)\n\n            posts += [post]\n\n        if not posts:\n            return []\n        self.state.document.settings.record_dependencies.add(\"####MAGIC####TIMELINE\")\n\n        template_data = {\n            'lang': lang,\n            'posts': posts,\n            # Need to provide str, not TranslatableSetting (Issue #2104)\n            'date_format': self.site.GLOBAL_CONTEXT.get('date_format')[lang],\n            'post_list_id': post_list_id,\n        }\n        output = self.site.template_system.render_template(\n            template, None, template_data)\n        return [nodes.raw('', output, format='html')]\n", "path": "nikola/plugins/compile/rest/post_list.py"}], "after_files": [{"content": "# -*- coding: utf-8 -*-\n\n# Copyright \u00a9 2013-2015 Udo Spallek, Roberto Alsina and others.\n\n# Permission is hereby granted, free of charge, to any\n# person obtaining a copy of this software and associated\n# documentation files (the \"Software\"), to deal in the\n# Software without restriction, including without limitation\n# the rights to use, copy, modify, merge, publish,\n# distribute, sublicense, and/or sell copies of the\n# Software, and to permit persons to whom the Software is\n# furnished to do so, subject to the following conditions:\n#\n# The above copyright notice and this permission notice\n# shall be included in all copies or substantial portions of\n# the Software.\n#\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY\n# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE\n# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR\n# PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS\n# OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR\n# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\n# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n\"\"\"Post list directive for reStructuredText.\"\"\"\n\nfrom __future__ import unicode_literals\n\nimport os\nimport uuid\nimport natsort\n\nfrom docutils import nodes\nfrom docutils.parsers.rst import Directive, directives\n\nfrom nikola import utils\nfrom nikola.plugin_categories import RestExtension\n\n# WARNING: the directive name is post-list\n#          (with a DASH instead of an UNDERSCORE)\n\n\nclass Plugin(RestExtension):\n    \"\"\"Plugin for reST post-list directive.\"\"\"\n\n    name = \"rest_post_list\"\n\n    def set_site(self, site):\n        \"\"\"Set Nikola site.\"\"\"\n        self.site = site\n        directives.register_directive('post-list', PostList)\n        PostList.site = site\n        return super(Plugin, self).set_site(site)\n\n\nclass PostList(Directive):\n    \"\"\"Provide a reStructuredText directive to create a list of posts.\n\n    Post List\n    =========\n    :Directive Arguments: None.\n    :Directive Options: lang, start, stop, reverse, sort, tags, categories, slugs, all, template, id\n    :Directive Content: None.\n\n    The posts appearing in the list can be filtered by options.\n    *List slicing* is provided with the *start*, *stop* and *reverse* options.\n\n    The following not required options are recognized:\n\n    ``start`` : integer\n        The index of the first post to show.\n        A negative value like ``-3`` will show the *last* three posts in the\n        post-list.\n        Defaults to None.\n\n    ``stop`` : integer\n        The index of the last post to show.\n        A value negative value like ``-1`` will show every post, but not the\n        *last* in the post-list.\n        Defaults to None.\n\n    ``reverse`` : flag\n        Reverse the order of the post-list.\n        Defaults is to not reverse the order of posts.\n\n    ``sort``: string\n        Sort post list by one of each post's attributes, usually ``title`` or a\n        custom ``priority``.  Defaults to None (chronological sorting).\n\n    ``tags`` : string [, string...]\n        Filter posts to show only posts having at least one of the ``tags``.\n        Defaults to None.\n\n    ``categories`` : string [, string...]\n        Filter posts to show only posts having one of the ``categories``.\n        Defaults to None.\n\n    ``slugs`` : string [, string...]\n        Filter posts to show only posts having at least one of the ``slugs``.\n        Defaults to None.\n\n    ``all`` : flag\n        Shows all posts and pages in the post list.\n        Defaults to show only posts with set *use_in_feeds*.\n\n    ``lang`` : string\n        The language of post *titles* and *links*.\n        Defaults to default language.\n\n    ``template`` : string\n        The name of an alternative template to render the post-list.\n        Defaults to ``post_list_directive.tmpl``\n\n    ``id`` : string\n        A manual id for the post list.\n        Defaults to a random name composed by 'post_list_' + uuid.uuid4().hex.\n    \"\"\"\n\n    option_spec = {\n        'start': int,\n        'stop': int,\n        'reverse': directives.flag,\n        'sort': directives.unchanged,\n        'tags': directives.unchanged,\n        'categories': directives.unchanged,\n        'slugs': directives.unchanged,\n        'all': directives.flag,\n        'lang': directives.unchanged,\n        'template': directives.path,\n        'id': directives.unchanged,\n    }\n\n    def run(self):\n        \"\"\"Run post-list directive.\"\"\"\n        start = self.options.get('start')\n        stop = self.options.get('stop')\n        reverse = self.options.get('reverse', False)\n        tags = self.options.get('tags')\n        tags = [t.strip().lower() for t in tags.split(',')] if tags else []\n        categories = self.options.get('categories')\n        categories = [c.strip().lower() for c in categories.split(',')] if categories else []\n        slugs = self.options.get('slugs')\n        slugs = [s.strip() for s in slugs.split(',')] if slugs else []\n        show_all = self.options.get('all', False)\n        lang = self.options.get('lang', utils.LocaleBorg().current_lang)\n        template = self.options.get('template', 'post_list_directive.tmpl')\n        sort = self.options.get('sort')\n        if self.site.invariant:  # for testing purposes\n            post_list_id = self.options.get('id', 'post_list_' + 'fixedvaluethatisnotauuid')\n        else:\n            post_list_id = self.options.get('id', 'post_list_' + uuid.uuid4().hex)\n\n        filtered_timeline = []\n        posts = []\n        step = -1 if reverse is None else None\n        if show_all is None:\n            timeline = [p for p in self.site.timeline]\n        else:\n            timeline = [p for p in self.site.timeline if p.use_in_feeds]\n\n        if categories:\n            timeline = [p for p in timeline if p.meta('category', lang=lang).lower() in categories]\n\n        for post in timeline:\n            if tags:\n                cont = True\n                tags_lower = [t.lower() for t in post.tags]\n                for tag in tags:\n                    if tag in tags_lower:\n                        cont = False\n\n                if cont:\n                    continue\n\n            filtered_timeline.append(post)\n\n        if sort:\n            filtered_timeline = natsort.natsorted(filtered_timeline, key=lambda post: post.meta[lang][sort], alg=natsort.ns.F | natsort.ns.IC)\n\n        for post in filtered_timeline[start:stop:step]:\n            if slugs:\n                cont = True\n                for slug in slugs:\n                    if slug == post.meta('slug'):\n                        cont = False\n\n                if cont:\n                    continue\n\n            bp = post.translated_base_path(lang)\n            if os.path.exists(bp):\n                self.state.document.settings.record_dependencies.add(bp)\n\n            posts += [post]\n\n        if not posts:\n            return []\n        self.state.document.settings.record_dependencies.add(\"####MAGIC####TIMELINE\")\n\n        template_data = {\n            'lang': lang,\n            'posts': posts,\n            # Need to provide str, not TranslatableSetting (Issue #2104)\n            'date_format': self.site.GLOBAL_CONTEXT.get('date_format')[lang],\n            'post_list_id': post_list_id,\n            'messages': self.site.MESSAGES,\n        }\n        output = self.site.template_system.render_template(\n            template, None, template_data)\n        return [nodes.raw('', output, format='html')]\n", "path": "nikola/plugins/compile/rest/post_list.py"}]}