有哪些实用的非内置Django标签?

3 投票
4 回答
520 浏览
提问于 2025-04-15 14:53

我刚接触Django,正在为将来的项目准备一些工具。在我上一个项目中,当内置的模板标签不能完全满足我的需求时,我就把模板搞得一团糟,强行把功能塞进去。后来我发现其实有一些模板标签可以让我省去很多时间,还能避免写出丑陋的代码。

那么,有哪些有用的模板标签是Django自带的没有的呢?

4 个回答

1

James Bennet的这个超级动态的 get_latest 标签

这是对jpartogi评论的回复

class GetItemsNode(Node):
    def __init__(self, model, num, by, varname):
        self.num, self.varname = num, varname
        self.model = get_model(*model.split('.'))
        self.by = by

    def render(self, context):
        if hasattr(self.model, 'publicmgr') and not context['user'].is_authenticated():
            context[self.varname] = self.model.publicmgr.all().order_by(self.by)[:self.num]
        else:
            context[self.varname] = self.model._default_manager.all().order_by(self.by)[:self.num]
        return  ''

<div id="news_portlet" class="portlet">
{% get_sorted_items cms.news 5 by -created_on as items %}
{% include 'snippets/dl.html' %}
</div>
<div id="event_portlet" class="portlet">
{% get_sorted_items cms.event 5 by date as items %}
{% include 'snippets/dl.html' %}
</div>

我把它叫做 get_sorted_items,不过这个想法是基于James的博客文章。

3

smart-if 是一个工具,它可以让你在模板中使用普通的 if x > y 这种写法,除此之外还有其他功能。

在 Django 1.2 版本中,现在有了一个更好的 if 标签(具体可以查看 发布说明),这个版本预计会在 2010年3月9日 发布。

4

我来开始吧。

http://www.djangosnippets.org/snippets/1350/

智能的 {% if %} 模板标签

如果你曾经发现自己需要的不仅仅是判断一个条件是否为真,那么这个标签就是为你准备的。它支持比较,比如相等、大于和小于。

简单示例

{% block list-products %}
    {% if products|length > 12 %}
        <!-- Code for pagination -->
    {% endif %}

    <!-- Code for displaying 12 products on the page -->

{% endblock %}

撰写回答