Well that was a lot easier. Thanks.

On Sunday, April 30, 2023 at 5:40:47 AM UTC-4 [email protected] wrote:

> On Sun, 30 Apr 2023 at 07:51, Mitch Berkson <[email protected]> wrote:
> >
> > Here's a way I did it. Probably there is a better way.
> >
> > Add a page to each directory (I used the file name "list_title.md") with 
> the metadata:
> > list_title = "Heading for the navigation links for this directory"
> > do_not_list = "True"
> >
> > In conf.py, define a context variable with the name that was used for 
> the page file with the metadata:
> > GLOBAL_CONTEXT = {
> > ...
> > 'LIST_TITLE_FILENAME': 'list_title.md',
> > }
> >
> > In base_header.tmpl, add the macros:
> > {# Return the title to use for the navigation links for the directory in 
> which #}
> > {# link is found by looking for the metadata "list_title" in 
> LIST_TITLE_FILENAME file #}
> > {% macro html_navigation_links_title(link) %}
> > {% set filename = link.split('/')[-2] + ".md" %}
> > {% set file_path = link[:-1] + ".md"%}
> > {% if filename == LIST_TITLE_FILENAME %}
> > {% set full_file_path = os.path.realpath("pages/" + file_path) %}
> > {% set f = open(full_file_path, 'r') %}
> > {% set file_contents = f.read() %}
> > {% set metadata = toml.loads(file_contents.split('+++')[1]) %}
> > <h1>{{ metadata['list_title'] }}</h1>
> > {% endif %}
> > {% endmacro %}
> >
> > {# Return listing for the link if the value of link's do_not_list 
> metadata field is not True #}
> > {% macro list_link(link, text) %}
> > {% set filename = link.split('/')[-2] + ".md" %}
> > {% set file_path = link[:-1] + ".md"%}
> > {% set full_file_path = os.path.realpath("pages/" + file_path) %}
> > {% set f = open(full_file_path, 'r') %}
> > {% set file_contents = f.read() %}
> > {% set metadata = toml.loads(file_contents.split('+++')[1]) %}
> > {% if metadata['do_not_list'] != "True" %}
> > <li><a href="{{ link }}">{{ text|e }}</a></li>
> > {% endif %}
> > {% endmacro %}
> >
> > In list.tmpl, modify the for loop to use the macros:
> > <ul class="postlist">
> > {% for text, link, count in items %}
> > {{ header.html_navigation_links_title(link) }}
> > {{ header.list_link(link, text) }}
> > {% if count %}
> > ({{ count }})
> > {% endif %}
> > {% endfor %}
> > </ul>
>
> 1. You should be able to just set the `title` variable.
> 2. Reading the files manually seems like an ugly hack. The list.tmpl
> template does not get the posts directly (although changing that
> wouldn't hurt). But without the posts variable, you could use some
> prefix for titles and then filter them out by that prefix. Something
> like:
>
> {% for text, link, count in items %}
> {% if text.startswith("DIRECTORY-TITLE:") %}
> {% set title = text.split("DIRECTORY-TITLE:")[1] %}
> {% endif %}
> {% endfor %}
>
> And then do the same check for display (but negated). I'm not sure if
> this is fully doable from within Jinja2 templates; you might need to
> expose some small helper functions in GLOBAL_CONTEXT.
>
> -- 
> Chris Warrick <https://chriswarrick.com/>
> PGP: 5EAAEA16
>

-- 
You received this message because you are subscribed to the Google Groups 
"nikola-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/nikola-discuss/d7f19455-87e5-4912-8b17-571b530a4c9bn%40googlegroups.com.

Reply via email to