Если вы пишете a, b = ...
, вы выполняете повторяемую распаковку [PEP-3132] .Поскольку объект Destination
, скорее всего, не повторяется, это не сработает.
Вы можете использовать списочное понимание, например, чтобы сгенерировать два Destination
здесь, это даже пропустит необходимость назначения target = [a, b]
aво второй раз:
def index(request):
<b>target</b> = a, b = <b>[</b>Destination() <b>for __ in range(2)]</b>
a.desc = 'Hello, How are you!'
a.img = '01.jpg'
b.desc = 'Hello, How are you!'
b.img = '02.jpg'
context = {
'target': target
}
return render(request, 'index.html', context)
и учитывая, что desc
является параметром конструктора Destination(..)
, вы можете также опустить это:
def index(request):
target = a, b = [Destination(<b>desc='Hello, How are you!'</b>) for __ in range(2)]
a.img = '01.jpg'
b.img = '02.jpg'
context = {
'target': target
}
return render(request, 'index.html', context)
Строго говоря, вы могли бысоздайте некоторый генератор, например:
def generator(f, n, *args, **kwargs):
return [f(*args, **kwargs) for __ in range(n)]
Затем вышеприведенное можно заменить на:
def index(request):
target = a, b = <b>generator(</b>Destination, 2, desc='Hello, How are you!'<b>)</b>
a.img = '01.jpg'
b.img = '02.jpg'
context = {
'target': target
}
return render(request, 'index.html', context)
Таким образом, это немного уменьшает количество стандартного кода, хотя может сделать его меньшечитаемый, так как теперь читателю нужно будет сначала проверить функцию generator
.