Как заставить эту функцию работать в views.py в django? - PullRequest
1 голос
/ 11 июля 2019

Я хочу, чтобы эта функция Destination() работала с несколькими переменными, потому что я не хочу писать ее снова и снова.Я сделал это равным с двумя переменными, но это не работает.Как решить эту проблему?

def index(request):
    a,b = Destination()
    a.desc = 'Hello, How are you!'
    a.img = '01.jpg'

    b.desc = 'Hello, How are you!'
    b.img = '02.jpg'

    target = [a,b]

    context = {
     'target': target
    }
    return render(request, 'index.html', context)

1 Ответ

4 голосов
/ 11 июля 2019

Если вы пишете 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...