根据模板中的模板显示m2m的元素

时间:2014-08-04 18:19:09

标签: django django-templates

我有一个简单的(相对)模型,例如:

models.py

class Author( models.Model ):
    first_name = model.CharField( max_length=30 );
    last_name = model.CharField( max_length=30 );
    something = model.FloatField( );

class Book( models.Model ):
    name = model.CharField( max_length=200 );
    authors = model.ManyToManyField( Author );

模板/ book.html

{% for book in books %}
    {{ book.name }}

    <div id="authors">
    {% for author in book.authors.all %}

        {{ author|template:"author_short.html" }}  *** unsure here

    {% endfor %}
    </div>

{% endfor %}

author_short.html(例如......)

<div style="border: 1px solid #f00;">
    Name: {{ first_name }} {{ last_name }} 
</div>

我希望能够做的是格式化作者&#39;基于某些模板的内循环中的信息。看起来我应该能够做那种事情。

最后,我想要做的是能够使用ajax调用添加作者(使用相同的格式!)。我知道我可以通过ajax添加,但我必须在两个地方进行格式化定义,因此不是DRY(除非我错过了另一种方法,这很可能)。

1 个答案:

答案 0 :(得分:1)

您可以使用include templatetag for this

  

加载模板并使用当前上下文呈现它。这是一种在模板中“包含”其他模板的方式

{% for author in book.authors.all %}

    {% include "author_short.html" %}

{% endfor %}

author_short.html仍可以是:

<div style="border: 1px solid #f00;">
    Name: {{ first_name }} {{ last_name }} 
</div>

可以重复使用