Daily Dev Notes 2024/06/10

OK, made some good progress tonight. Refactored the post and posts contexts for all the views, and then had to update the tests to match.

Then I had my first crack at implementing template hierarchy. Again, inspired by the old WordPress template files.

With a little help from my AI friends, and of course the Django docs, I came up with the below code which does exactly what I want.

from django.template.loader import TemplateDoesNotExist, select_template

...

def post_detail(request: HttpRequest, path: str) -> HttpResponse:

...

	template_names: list[str] = [
	    "djpress/single.html",
	    "djpress/index.html",
	]
	template = select_template(template_names)
	
	if not template.template.name:
	    msg = "Template not found"
	    raise TemplateDoesNotExist(msg)
	
	...
	
	return render(
	    request=request,
	    context={"post": post},
	    template_name=template.template.name,
)

I implemented similar heirachy for the date-based archives, category, and author views too, and also the home/index page.

  • index view:
template_names: list[str] = [
        "djpress/home.html",
        "djpress/index.html",
    ]
  • author view:
template_names: list[str] = [
        "djpress/author.html",
        "djpress/index.html",
    ]
  • category view:
template_names: list[str] = [
        "djpress/category.html",
        "djpress/index.html",
    ]
  • archives view:
template_names: list[str] = [
        "djpress/archives.html",
        "djpress/index.html",
    ]

Nice win!