Это ошибка с переменным доступом в Google Application Engine + Django?

StackOverflow https://stackoverflow.com/questions/814996

  •  03-07-2019
  •  | 
  •  

Вопрос

Недавно я заметил очень тревожную проблему.

У меня есть следующий код python:

for cat in cats:
  cat.pages = ['apple', 'table', 'computer']

template_values = {
  'cats': cats
}

path = os.path.join(os.path.dirname(__file__), 'templates/index.html')
self.response.out.write(template.render(path, template_values))

Шаблон index.html django выглядит следующим образом:

{% for cat in cats %}
   <div>{{ forloop.counter }}</div>
   <div>name: {{ cat.cat_name }}</div>
   <div>pages: {{ cat.pages|length }}<br>
{% endfor %}

Когда я запускаю приведенный выше код локально с GAE SDK, я получаю следующий пример результатов:

1.
name: sample1
pages: 3

2.
name: sample2
pages: 3

и т.д.Я даже могу создать вложенный цикл, так как я могу получить доступ к cat.pages внутри цикла.Однако, когда я загружу этот код в AppEngine, я получу следующие результаты:

1.
name: sample1
pages: 0

2.
name: sample2
pages: 0

И я вообще не могу получить доступ к переменной cat.pages.Что не так с моим кодом?Или это ошибка?Он работает локально, как и ожидалось, но выдает этот странный результат после развертывания на серверах GAE.Любая помощь приветствуется.

Это было полезно?

Решение

Может быть, попробовать:

for cat in cats:
   for item in ['apple', 'table', 'computer']:
       cat.pages.append(item)

Если cat.pages - это что-то необычное в GAE, например, инструментальный список, ваш исходный код полностью заменил бы его обычным списком python.

Другие советы

Я думаю, нам понадобится больше контекста, чтобы понять, в чем здесь проблема.Откуда взялось слово "кошки" и что представляют собой отдельные объекты cat?Я предполагаю, что это экземпляры модели, но трудно сказать, основываясь на вашем примере.Сработает ли это, если вы замените их массивом подклассов простых объектов?Это покажет вам, является ли это чем-то специфичным для используемого вами класса.

Однако в целом присваивать вашим объектам произвольные свойства для удобства создания шаблонов - плохая идея.Вам было бы лучше создать объект-контейнер или словарь.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top