LINUX.ORG.RU

Подстановка названия keyword argument из строки

 


0

1

Есть такой код:

for p in person.objects.exclude(recording=None):
        output+="<a href='/people/"+str(p.id)+"'>"+p.name+"</a> ("+str(len(p.recording_set.all()))+")<br>"
Все хорошо, только в общем случае вместо recording нужно подставлять название одного из нескольких полей, переданное строкой.
Во второй строке это имя атрибута, и можно заменить p.recordings на getattr(p, 'recordings'+'_set')
А вот в первой recording - это keyword, и как его подставить из строки, я так и не смог выяснить.

★★

Последнее исправление: shatsky (всего исправлений: 1)

Нашел решение - можно передавать kwargs ассоциативным массивом, **{'recording':None} вместо recording=None

shatsky ★★
() автор топика
Ответ на: комментарий от power

При чем тут php? Писал на нем, но никогда не делал подобного.
Как еще решить эту задачу, не дублируя код для разных названий полей модели?

shatsky ★★
() автор топика
Ответ на: комментарий от tailgunner

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

shatsky ★★
() автор топика
Ответ на: комментарий от shatsky

В самой Django есть неплохой шаблонизатор. Но если тебе нужно быстро и просто собрать строку (например, для дополнительного поля в админке), то возьми хотя бы питонячий format. Так же как и методы count у QuerySet и get_absolute_url у Model :)

power
()
Ответ на: комментарий от power

Ты про вывод тегов прямо в коде? Не все сразу же, сначала мне нужно было разобраться с моделью и как из нее брать данные. Да, сейчас я уже дошел до использования django.template. Но вопрос был не об этом.

shatsky ★★
() автор топика
Ответ на: комментарий от tailgunner

См. выше. Я спрашивал про подстановку имен переменных, а не про то, как формировать вывод.

shatsky ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.