如何向Django自定义模板标签函数传值及TemplateSyntaxError报错解决
问题原因与修复方案
总共存在4处错误,按顺序修复即可:
- 视图未将car_id传入模板上下文
你日志中看到的car_id是视图函数的局部变量,并未加入模板上下文字典,模板根本获取不到该值。
修改views.py的context部分:
def get_car_spare_parts(request, car_id): spare_parts = Mileage.objects.filter(car_id=car_id) context = { 'spare_parts': spare_parts, 'title': 'Список запчастей для', 'car_id': car_id, # 新增这行,把car_id传入模板 } return render(request, 'mileage/car.html', context)
- 自定义模板标签查询字段写错
Car模型的主键字段名为id,你标签里的查询条件用了不存在的car_id字段,会触发后续查询报错。
修改mileage_tags.py:
@register.simple_tag def get_car_info(car_id): car = get_object_or_404(Car, id=car_id) # 把car_id=car_id改成id=car_id return car
- 模板调用标签未传参、未接收返回值
你当前调用标签时没有传入必填的car_id参数,且没有把标签返回的Car对象存为模板变量,后续的品牌、车型字段依然无法渲染。
修改car.html对应部分:
{% block body %} <!-- 调用标签传参,并且把返回的car对象存为模板变量 --> {% get_car_info car_id as car %} <h1>{{ title }} {{ car.brand }} {{ car.model_name }} {{ car.age }} г./в.</h1> <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 %}
内容的提问来源于stack exchange,提问作者Vitalii Mytenko
相关产品推荐
相关产品推荐

