Как получить доступ к элементу словаря в шаблоне Django?

Лучший подход может быть должен использовать Сервис NT как обертку для Вашего приложения. Когда Сервис NT запускается, Ваше приложение может начать в "неактивном" режиме, ожидающем команды запускаться (или настраиваться для запуска автоматически).

Думают об автомобиле, когда он запустился, он начинается в состоянии ожидания, ожидающем Вашей команды, чтобы продвинуться или инвертировать. Это также допускает другие преимущества, такое так лучшее удаленное администрирование, как можно выбрать, как выставить приложение.

170
задан daaawx 21 April 2019 в 18:49
поделиться

4 ответа

Чтобы повторить / продолжить комментарий Джеффа, я думаю, вы должны стремиться к простому свойству в вашем классе 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 - запустить запрос для подсчета голосов. Но если он генерирует ужасные запросы, вы всегда можете заполнить свойство в своем представлении данными, которые вы собрали самостоятельно.

61
ответ дан 23 November 2019 в 20:45
поделиться

Вам нужно найти (или определить) тег шаблона 'get', например, здесь .

Определение тега:

@register.filter
def hash(h, key):
    return h[key]

И он используется как:

{% for o in objects %}
  <li>{{ dictionary|hash:o.id }}</li>
{% endfor %}
22
ответ дан 23 November 2019 в 20:45
поделиться

В идеале вы должны создать метод для объекта выбора, который оказался в голосах, или создать связь между моделями. Тег шаблона, который выполняет поиск в словаре, тоже подойдет.

3
ответ дан 23 November 2019 в 20:45
поделиться

вы можете использовать точечную нотацию:

Точечный поиск можно резюмировать как это: когда система шаблонов встречает точку в имени переменной, он пытается выполнить следующие поиски в этот порядок:

  • Поиск по словарю (например, foo ["bar"])
  • Поиск по атрибутам (например, foo.bar)
  • Вызов метода (например, foo.bar ())
  • Индекс списка поиск (например, foo [2])

Система использует первый тип поиска это работает. Это логика короткого замыкания.

172
ответ дан 23 November 2019 в 20:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: