Как передать в reverse() аргумент? Django
Код в urls.py:
urlpatterns = [
path('', TaskListView.as_view(), name='home_page'),
path('create_task/', TaskCreateView.as_view(), name='create-task'),
path('<int:year>/<int:month>/<int:day>/<int:pk>/update_task/', TaskUpdateView.as_view(), name='update-task'),
path('<int:year>/<int:month>/<int:day>/<int:pk>/delete_task/', TaskDeleteView.as_view(), name='delete-task'),
]
Код в models.py:
def get_absolute_url_for_update(self):
return reverse('update-task', kwargs={'year': self.publish.year,
'month': self.publish.month,
'day': self.publish.day,
'pk': self.pk})
def get_absolute_url_for_delete(self):
return reverse('delete-task', kwargs={'year': self.publish.year,
'month': self.publish.month,
'day': self.publish.day,
'pk': self.pk})
Код в task.html
{% block content %}
{% for task in task_list %}
<p> {{ task }} </p>
<strong> <a href="{{ task.get_absolute_url_for_update}}"> Изменить </a> </strong>
<strong> <a href="{{ task.get_absolute_url_for_delete }}"> Удалить </a> </strong>
{% endfor %}
{% endblock %}
Суть вопроса: У меня в моей модели Task есть два get_absolute_url метода, которые по сути своей выполняют одну и ту же работу, этим самым нарушая DRY, есть ли какой то способ, чтобы в шаблоне html передавать параметр для get_absolute_url, например, get_absolute_url(self, args): И отталкиваясь от этого возвращать reverse с тем или иным именем. Или , может быть, есть какие-то другие альтернативы, дабы решить данную проблему.
P.S. я новичок, первый пост.
Вы можете написать свой новый класс, наследованный от reverse и перезагрузить там этот метод, так как Вам надо
Создайте функцию, которая будет создавать окончание ссылки
def make_ending_url(self):
return {'year': self.publish.year, 'month': self.publish.month, 'day': self.publish.day, 'pk': self.pk}}
И в get_absolute_url:
def get_absolute_url_for_update(self):
return reverse('update-task', kwargs=self.make_ending_url())
def get_absolute_url_for_delete(self):
return reverse('update-task', kwargs=self.make_ending_url())