items()
может вернуть любой объект Python, это не обязательно должна быть модель Django. По умолчанию каждый объект передается методу location
, который должен возвращать URL-адрес объекта (в модели Django он использует метод get_absolute_url()
).
Таким образом, в основном, если у вас есть класс python, который определяет каждую «страницу», которую вы хотите показать в вашей карте сайта (это может быть просто строка или кортеж строк), и вы определяете метод, который возвращает URL на этой странице вам просто нужно вызвать этот метод в location()
, чтобы переопределить поведение по умолчанию.
items
также может быть просто списком строк, которые вы бы использовали в пути URL. Тогда location()
будет использовать reverse()
с каждой из этих строк. Скажем, например, URL вашей страницы продукта использует регулярное выражение, как это:
path('products/<str:category>/<str:name>', name='product')
и в items()
вы возвращаете список словарей:
return [{'category': cat, 'name': name} for cat, name in product_searches]
тогда ваша location(item)
функция должна будет вернуть:
return reverse('product', kwargs={'category': item.category, 'name': item.name})
Подробнее см. В документах