Django : Что означает "%" в self.success_messages % fiche.__dict__

С тех пор, как я перешел на Python, я часто видел и использовал :

class FicheDeleteView(LoginRequiredMixin, DeleteView):
    model = Fiche
    success_url = reverse_lazy('fiche-list')
    success_messages = "La Fiche %(ref_id)s a bien été supprimée"

    def delete(self, request, *args, **kwargs):
        fiche = self.get_object()
        messages.success(self.request, self.success_messages %
                         fiche.__dict__)
        return super(FicheDeleteView, self).delete(request, *args, **kwargs)

Даже если я увижу эффекты этой механики, я не совсем уверен, что пойму.

Значит ли это, что : я посылаю в "обратную ленту" весь FICHE dict и в моем message.success я получаю fiche.ref_id с %(ref_id)s?

Оператор % - это старое место форматирования строки, которое позволяет включать переменные в строку. Поэтому, если вы хотите включить переменную name в строку, вы можете использовать оператор % в качестве заполнителя.

name = 'world'
print('Hello, %s' % name)
>>> Hello, world

В вашем примере оператор % в success_message принимает словарь в качестве переменной, а затем получает доступ к значению из ключа ref_id в этом словаре.

success_messages = "La Fiche %(ref_id)s a bien été supprimée"
example_dict = {'key_1': 'value_1', 'ref_id': 'value_2'}
print(success_messages % example_dict)
>>> La Fiche value_2 a bien été supprimée

Начиная с Python >= 3.6 вы можете использовать f-строки, что делает его более читабельным:

example_dict = {'key_1': 'value_1', 'ref_id': 'value_2'}
print(f"La Fiche {example_dict['ref_id']} a bien été supprimée")
>>> La Fiche value_2 a bien été supprimée

Вы можете прочитать больше о форматировании строк в python здесь

Вернуться на верх