Из документов :
Многие теги шаблонов принимают ряд аргументов - строк или переменных шаблона - и возвращают page_navigation после некоторой обработки
simple tags
предназначены для печати части информации, а не для присвоения некоторого результата переменной (список в вашем случае)
Итак, вам лучше использовать тег включения :
@register.inclusion_tag('links.html')
def page_navigation(a, b, *args, **kwargs):
pages = Page.objects.all()
links = [['Events','/']]
for page in pages:
links.append([page.title, '/'+page.url])
return {'links':links}
и создание файла links.html
в каталоге шаблонов:
<ul>
{% if links %}
{% for link in links %}
<a href="{{link.1}}"><li>{{link.0}}</li></a>
{% endfor %}
{% else %}
<li>no pages found</li>
{% endif%}
</ul>
и в исходном шаблоне вы можете включить его:
{% load pages_navigation %}
{% page_navigation %}
, который вызовет тег шаблона, отобразит его и вставит в ваш шаблон