Я пытаюсь добавить файлы Sitemap на свой сайт django, и у меня возникли проблемы,
Вот обратная связь:
Internal Server Error: /sitemap.xml
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
response = get_response(request)
File "C:\ProgramData\Anaconda3\lib\site-packages\django\core\handlers\base.py", line 126, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\ProgramData\Anaconda3\lib\site-packages\django\core\handlers\base.py", line 124, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\ProgramData\Anaconda3\lib\site-packages\django\contrib\sitemaps\views.py", line 16, in inner
response = func(request, *args, **kwargs)
File "C:\ProgramData\Anaconda3\lib\site-packages\django\contrib\sitemaps\views.py", line 71, in sitemap
protocol=req_protocol))
File "C:\ProgramData\Anaconda3\lib\site-packages\django\contrib\sitemaps\__init__.py", line 111, in get_urls
urls = self._urls(page, protocol, domain)
File "C:\ProgramData\Anaconda3\lib\site-packages\django\contrib\sitemaps\__init__.py", line 120, in _urls
loc = "%s://%s%s" % (protocol, domain, self.__get('location', item))
File "C:\ProgramData\Anaconda3\lib\site-packages\django\contrib\sitemaps\__init__.py", line 68, in __get
return attr(obj)
File "C:\ProgramData\Anaconda3\lib\site-packages\django\contrib\sitemaps\__init__.py", line 75, in location
return obj.get_absolute_url()
TypeError: 'str' object is not callable
Это происходит потому, что я использовал свойство @cached в методе get_absolute_url () модели, используемой для карт сайта.
Метод в модели:
@cached_property
def get_absolute_url(self):
return reverse('person', args=[self.slug])
В urls.py
sitemaps = {
'people': GenericSitemap({
'queryset': Person.objects.all()
}, priority=0.4, changefreq='weekly'),
}
urlpatterns = [
path('sitemap.xml', sitemap, {'sitemaps': sitemaps}, name='django.contrib.sitemaps.views.sitemap'),
]
Когда я удаляю cached_property, он работает должным образом, но я не хочу удалять декоратор, потому что я думаю, что это помогает уменьшить количество обратных ссылок, разве нет другого варианта?
РЕДАКТИРОВАТЬ : я вызываю этот get_absolute_url из множества мест в шаблоне и много раз, как при создании списка людей и тому подобное, чтобы получить его ссылку. Поэтому я начал использовать @cached_property для кеширования, чтобы сократить время.