Показ дописів із міткою template. Показати всі дописи
Показ дописів із міткою template. Показати всі дописи

Django grouper і None

Проблемка тут описана.

Рішення:
        {% if news_date.grouper %}
            {% if forloop.parentloop.first and forloop.first %}
                {{ news_date.grouper }}
            {% else %}
                {{ news_date.grouper }}
            {% endif %}
        {% else %}
            Сьогодні
        {% endif %}

шаблонний фільтр для числівників

Інколи потрібно разом з цифрою вказати слово у вірній множині. Наприклад: 1 коментар, 9 коментарів, 2 коментарі. Django в комплекті має багато шаблонних фільтрів, але для нашої солов'їної треба написати власний.


# -*- coding: utf-8 -*-

from django import template
register = template.Library()

@register.filter
def uapluralize(value, arg="дурак,дураки,дураків"):
    args = arg.split(",")
    number = abs(int(value))
    a = number % 10
    b = number % 100

    if (a == 1) and (b != 11):
        return args[0]
    elif (a >= 2) and (a <= 4) and ((b < 10) or (b >= 20)):
        return args[1]
    else:
        return args[2]
І в шаблоні:
{% load uapluralize %}
{{ m.comments_count|uapluralize:"коментар,коментарі,коментарів" }}

choices значення в шаблоні

class TaskStatus(models.Model):
POSTED, ASSIGNED, COMPLETED, CLOSED = range(1,5)
TASK_STATUS_VALUES = (
(POSTED, 'Posted'),
(ASSIGNED, 'Assigned'),
(COMPLETED, 'Completed'),
(CLOSED, 'Closed'),
)
task = models.ForeignKey(Task)
task_status = models.IntegerField(choices=TASK_STATUS_VALUES, blank=True, null=True)


Класичний вивід в шаблоні task_status видасть int значення.
Щоб вивести асоційоване ім'я, в шаблоні потрібно писати наступну конструкцію:
{% for ts in task_status %}
{{ ts.get_task_status_display}}
{% endfor %}