Вывод данных в виде

Вид (или контроллер) - ключевой элемент в моделях MTV (MVC), поэтому важно, чтобы он выглядел чисто и аккуратно. Каким образом лучше выдать результат его работы?

"Совершенно случайно" в своем текущем проекте я обнаружил, что один контроллер выдает данные так:

data['product'] = product
data['category'] = category

return data

А другой так:

return {'product': product,
        'category': category}

Я задался вопросом, а какой способ лучше? Аккуратнее выглядит первый способ. В теле вида мы присвоили данные нужным ключам словаря data и в итоге выводим этот словарь. Второй выглядит громоздко, однако именно его я помню в уроках по pyramid - возможно у этого есть важная причина. Не найдя быстрого ответа, я оставил размышления и продолжил разработку…

Спустя некоторое время я замечаю ошибки 500 в панели веб-мастера Google, которые получались из-за неопределенной переменной в шаблоне. “Как же так”, подумал я -- “все тесты зеленые, все исключения обработаны… как это что-то не определено?!”.

Выяснилось следующее: в виде, где я просто возвращаю return data, я условно задавал переменную, забыв указать значение по умолчанию:

if product.current_price:
    data['price_delta'] = product.get_price_delta()

В некоторых случаях шаблон не получал price_delta и выдавал ту самую 500-ую ошибку. Ну вот и стало очевидным преимущество второго способа - в нем мы

  • видим все, что отправляем в шаблон в одном месте
  • снижается шанс забыть какую-нибудь переменную при каком-то условии

Если бы я выводил price_delta вторым способом, то скорее всего, я бы не забыл указать значение для обоих вариантов условия:

return {'price_delta': product.get_price_delta() if product.current_price else 0}

Note

Скорее всего этот опыт относится к выдаче данных словарём в любой функции, однако с такой вот досадной ошибкой я столкнулся только в видах своего веб-приложения. Вероятно, при 100%-ом покрытии тестами удалось бы избежать и ее.

comments powered by Disqus