【问题标题】:Template-level model methods in Django to respect both DRY and MTV (MVC)?Django 中的模板级模型方法同时尊重 DRY 和 MTV (MVC)?
【发布时间】:2010-12-01 17:28:40
【问题描述】:

例如,假设购物网站上有一个 T 恤模型,它会有带有缩略图、名称和价格的“摘要”标记:

<div>
    <a href="detailspage">Awesome TShirt!</a>
    <img src="thumbnail.jpg" />
    <span class="price">$55.99</span>
</div>

由于这将出现在许多不同的页面上,我不想在不同的模板中一遍又一遍地输入它。我更喜欢在模板中调用像 tshirt.show_summary() 这样的方法来返回这个 html。

但如果我们将其放入模型中,我们将混合我们的表示层和模型层。

是否有任何解决方法,或者我们只是接受它并违反 MTV 或 DRY?

【问题讨论】:

    标签: django django-models django-templates


    【解决方案1】:

    将您的 HTML 代码放入模板并使用 {% include %} 加载它。这是一个例子:

    item.html

    <div>
        <a href="{% url tshirt_details item">{{ item.name }}</a>
        <img src="{{ item.image.url }}" />
        <span class="price">${{ item.price }}</span>
    </div>
    

    tshirt_list.html

    {% for tshirt in object_list %}
        {% with tshirt as item %}
            {% include "item.html" %}
        {% endwith %}
    {% endfor %}
    

    像 dar 建议的那样,包含标签也经常用于此类场景。

    【讨论】:

      【解决方案2】:

      考虑将其设为包含标签:http://docs.djangoproject.com/en/dev/howto/custom-template-tags/#inclusion-tags

      {% show_summary tshirt %}

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-15
        • 1970-01-01
        • 1970-01-01
        • 2012-11-07
        • 1970-01-01
        • 2016-12-27
        • 2011-09-17
        相关资源
        最近更新 更多