私は Django に比較的慣れていないので、将来のプロジェクトのためにツールボックスを構築しようとしています。私の最後のプロジェクトでは、組み込みのテンプレート タグが必要な機能を十分に発揮できなかったとき、私はテンプレートをごちゃごちゃにして機能に押し込みました。後で、時間と見苦しいコードを節約できるテンプレート タグを見つけました。
では、Django に組み込まれていない便利なテンプレート タグにはどのようなものがあるでしょうか?
私は Django に比較的慣れていないので、将来のプロジェクトのためにツールボックスを構築しようとしています。私の最後のプロジェクトでは、組み込みのテンプレート タグが必要な機能を十分に発揮できなかったとき、私はテンプレートをごちゃごちゃにして機能に押し込みました。後で、時間と見苦しいコードを節約できるテンプレート タグを見つけました。
では、Django に組み込まれていない便利なテンプレート タグにはどのようなものがあるでしょうか?
始めます。
http://www.djangosnippets.org/snippets/1350/
True のテスト以上のものが必要な場合は、このタグが最適です。等号、大なり、小なりの演算子をサポートしています。
{% block list-products %}
{% if products|length > 12 %}
<!-- Code for pagination -->
{% endif %}
<!-- Code for displaying 12 products on the page -->
{% endblock %}
スマートな場合。if x > y
とりわけ、テンプレートで通常の構成を許可します。
2010 年 3 月 9 日にリリース予定if
の Django 1.2 (リリース ノートを参照) には、より優れたタグが含まれています。
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 のブログ投稿に基づいています
場合によっては、{% autopaginate queryset %} ( http://code.google.com/p/django-pagination/ ) が便利です。例えば:
#views.py
obj_list = News.objects.filter(status=News.PUBLISHED)
# do not use len(obj_list) - it's evaluate QuerySet
obj_count = obj_list.count()
#news_index.html
{% load pagination_tags %}
...
# do not use {% if obj_list %}
{% if obj_count %}
<div class="news">
<ul>
{% autopaginate obj_list 10 %}
{% for item in obj_list %}
<li><a href="...">{{ item.title }}</a></li>
{% endfor %}
</ul>
</div>
{% paginate %}
{% else %}
Empty list
{% endif %}
obj_list は遅延でなければならないことに注意してください - http://docs.djangoproject.com/en/dev/ref/models/querysets/#id1を読んでください