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 здесь