2016-05-10 7 views
0

Я новичок в django (и вообще программировании), и я пытаюсь создать расширение для расширений. Это расширение отображает полное имя пользователя в столбце. Код работает по большей части, однако я не понимаю, что делает переменная состояния в этом методе.Что означает «состояние» в отношении приложений Django?

# renders column to display 
    def render_data(self, state, review_request): 
     # returns user's fullname (or username if fullname does not exist) 
     user = review_request.submitter 
     return user.get_full_name() or user.username 

Этот код работает, но когда я удалить «состояние» аргумент поля отображается «None» вместо FULLNAME пользователя. Я пробовал смотреть в Интернете, но я не мог найти объяснения того, что делает эта переменная.

Я даже не звоню в мой метод, но все равно влияет на результат.

Мне не нравится иметь код, который я не совсем понимаю (сложнее отладить), так может кто-то пролить свет на это?

То, что я думаю, что это означает

Я думаю, что государство относится к экземпляру объекта. В этом случае будет view_request, для которого выполняется полное имя. Без этого экземпляра один запрос на проверку не может быть отделен от всех них. Я до сих пор не знаю, как это влияет на код, даже если я его не называю.

Редактировать: C14L был прав, я переименовал состояние в foobar, и мой код все еще функционировал должным образом. Я выкопал немного больше в source кода djblets/django, где он вызывает функцию.

rendered_data = self.render_data(state, obj) 
+1

В коде, который вы отправили, 'state' вообще не используется. Но, если вы его удалите, то второй аргумент будет рассмотрен как 'review_request'. Но эта функция называется, ожидая, что 'review_request' станет третьим аргументом. Вы не можете просто изменить количество или порядок аргументов, потому что вызывающие не знают об этом. Попробуйте переименовать 'state' в' foobar', и функция будет работать по-прежнему. – C14L

+0

Спасибо! Переименование состояния в foobar не изменило выход. Мне может просто нужно сохранить какой-то «заполнитель», чтобы съесть второй аргумент. Было бы непитоновым просто держать там местозаполнитель? Или я должен попытаться найти обходное решение? – MTTT

+0

Также вы можете отправить свой комментарий в качестве ответа, так как он отвечает на мой вопрос. – MTTT

ответ

0

В коде, который вы отправили, state не используется вообще. Но, если вы удалите его, то вторым аргументом станет review_request. Но эта функция называется, ожидая, что review_request будет третьим аргументом. Вы не можете просто изменить количество или порядок аргументов, потому что вызывающие не знают об этом. Попробуйте переименовать state в foobar, и функция будет работать по-прежнему.

Вы можете просто оставить state там, это прекрасно. Интерфейс функции/метода не должен меняться только потому, что один из аргументов не используется (больше) внутри функции или метода.

Смежные вопросы