Templatetags не получает id объекта в Django
Вот такая ошибка:
TemplateSyntaxError at /car/2/
'get_car_info' did not receive value(s) for the argument(s): 'car_id'
Но, лог показывает, что в глобальной переменной, есть этот car_id:
Local vars
Variable Value
car_id 2
context {'spare_parts': <QuerySet [<Mileage: Рулевой наконечник Sasic 7674007>]>,
'title': 'Список запчастей для'}
request <WSGIRequest: GET '/car/2/'>
Есть модель автомобиля. models.py
class Car(models.Model):
brand = models.CharField(max_length=40, db_index=True, verbose_name="Марка")
model_name = models.CharField(max_length=60, db_index=True, verbose_name="Модель")
model_variant = models.CharField(max_length=100, db_index=True, verbose_name="Модификация")
age = models.SmallIntegerField(verbose_name="Год выпуска")
views.py (закоментированный код вынес в templatetags)
def get_car_spare_parts(request, car_id):
""" получаем список запчастей для конкретной марки и модели авто """
# TODO сделать DISTINCT
spare_parts = Mileage.objects.filter(car_id=car_id)
# car = Car.objects.get(id=car_id)
context = {
'spare_parts': spare_parts,
'title': 'Список запчастей для',
# 'model_name': car.model_name,
# 'brand': car.brand,
# 'car_age': car.age,
}
return render(request, 'mileage/car.html', context)
urls.py
urlpatterns = [
path('car/<int:car_id>/', get_car_spare_parts, name='car_spare_parts'),]
Чтобы убрать дублирование кода в двух функциях во views.py вынес получение объекта автомобиля по id в templatetags в файл mileage_tags.py
@register.simple_tag
def get_car_info(car_id):
car = get_object_or_404(Car, car_id=car_id)
return car
Файл шаблона car.html
{% extends 'base.html' %}
{% load mileage_tags %}
{% block head %}
<title>{{ title }}</title>
{% endblock %}
{% block body %}
<h1>{{ title }} {{ brand }} {{ model_name }} {{ car_age }} г./в.</h1>
{% get_car_info %}
<ol class="list-group list-group-numbered">
{% for item in spare_parts %}
<li class="list-group-item"><a href="{% url 'spare_parts_mileages' item.car_id item.spare_part_id %}">{{ item }}</a></li>
{% endfor %}
</ol>
{% endblock %}
Как устранить эту ошибку?