Лучший подход может быть должен использовать Сервис NT как обертку для Вашего приложения. Когда Сервис NT запускается, Ваше приложение может начать в "неактивном" режиме, ожидающем команды запускаться (или настраиваться для запуска автоматически).
Думают об автомобиле, когда он запустился, он начинается в состоянии ожидания, ожидающем Вашей команды, чтобы продвинуться или инвертировать. Это также допускает другие преимущества, такое так лучшее удаленное администрирование, как можно выбрать, как выставить приложение.
Чтобы повторить / продолжить комментарий Джеффа, я думаю, вы должны стремиться к простому свойству в вашем классе Choice, которое вычисляет количество голосов, связанных с этим объектом:
class Choice(models.Model):
text = models.CharField(max_length=200)
def calculateVotes(self):
return Vote.objects.filter(choice = self).count()
votes = property(calculateVotes)
И затем в ваш шаблон, вы можете сделать:
{% for choice in choices %}
{{choice.choice}} - {{choice.votes}} <br />
{% endfor %}
Тег шаблона, ИМХО, немного излишний для этого решения, но это тоже не ужасное решение. Цель шаблонов в Django - изолировать вас от кода в ваших шаблонах и наоборот.
Я бы попробовал описанный выше метод и посмотрел, какой SQL генерирует ORM, так как я не уверен, будет ли он предварительно кэшировать свойства и просто создаст подзапрос для свойства или будет итеративно / on-demand - запустить запрос для подсчета голосов. Но если он генерирует ужасные запросы, вы всегда можете заполнить свойство в своем представлении данными, которые вы собрали самостоятельно.
Вам нужно найти (или определить) тег шаблона 'get', например, здесь .
Определение тега:
@register.filter
def hash(h, key):
return h[key]
И он используется как:
{% for o in objects %}
<li>{{ dictionary|hash:o.id }}</li>
{% endfor %}
В идеале вы должны создать метод для объекта выбора, который оказался в голосах, или создать связь между моделями. Тег шаблона, который выполняет поиск в словаре, тоже подойдет.
вы можете использовать точечную нотацию:
Точечный поиск можно резюмировать как это: когда система шаблонов встречает точку в имени переменной, он пытается выполнить следующие поиски в этот порядок:
- Поиск по словарю (например, foo ["bar"])
- Поиск по атрибутам (например, foo.bar)
- Вызов метода (например, foo.bar ())
- Индекс списка поиск (например, foo [2])
Система использует первый тип поиска это работает. Это логика короткого замыкания.