When using this, I'd like the home page to be displayed directly instead of 
needing to click the first link. I'm imagining a condition in list.tmpl 
which would put the html from a home.md file into the content block instead 
of a link to it. But maybe that can't be done using PAGE_INDEX?

On Sunday, April 30, 2023 at 10:52:26 AM UTC-4 Mitch Berkson wrote:

> 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/871f8a0e-cd99-4c50-8bca-7c15dfb7f6a8n%40googlegroups.com.

Reply via email to