在Django模板语言中包含标记 - 我可以传递给它的是什么?

时间:2015-03-07 02:18:00

标签: python django django-templates

好的,所以再一次可能有一个简单的"解决这个问题,但我是初学者,对我来说似乎没什么好看的。

我有一个视图和一个模板,显示我已建模的Car类实例的属性。此Car类与我的自定义User类具有ManyToMany关系。显示给定Car实例属性的模板有很多变量。每辆车的视图都很好。这是我无法开展的工作:

我为每个User实例都有一个用户个人资料页面。从该页面,我想显示特定用户所拥有的每辆汽车的属性"收藏。"我无法弄清楚如何做到这一点。

我已尝试使用{%include%}标记来包含Car模板的片段,然后使用for语句迭代最喜欢的User集。从理论上讲,这将填充用户页面,其中包含他们拥有的每辆车" favited"并显示其属性。但是,我不知道如何将{%include%}标记传递给适当的上下文,以便为每个Car实例正确填充属性。这可能吗?

是否有一种更简单的方法可以让我忽略?

感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

使用{% include ... with ... %}语法:

{% for car in user.favorite_cars.all %}
    {% include "car.html" with name=car.name year=car.year %}
{% endfor %}

另一种选择是{% with %}标记:

{% for car in user.favorite_cars.all %}
    {% with name=car.name year=car.year %}
        {% with color=car.color %}
            {% include "car.html" %}
        {% endwith %}
    {% endwith %}
{% endfor %}

更新:如果无法从Car模型获取模板的数据,则必须使用custom inclusion tag

from django import template

register = template.Library()

@register.inclusion_tag('car.html')
def show_car(car):
    history = get_history_for_car(car)
    return {'name': car.name, 'history': history}

在模板中:

{% load my_car_tags %}

{% for car in user.favorite_cars.all %}
    {% show_car car %}
{% endfor %}