среда, 6 октября 2010 г.

Django: подлый request.is_ajax()

Наверное все, ну, или почти все Django-разработчики сталкивались с потребностью использовать Ajax в своих проектах. Нет, я не буду рассказывать об ajax в Django вообще, а только о замечательном методе is_ajax() объекта request, который, как известно, передается параметром в обработчик вида. Насколько мне известно по своему опыту и по опыту моих знакомых часто с ним возникает один замечательный казус. Давайте взглянем на следующие строчки кода:


def my_view(request, *args, **kwargs):
...
if request.is_ajax:
...


def my_view(request, *args, **kwargs):
...
if request.is_ajax():
...


Как вы успели догадаться, правильной является вторая запись. Примечательно то, что название метода так и подкупает подумать, что это не метод, а свойсто, то бишь @property, а первый вариант всегда будет возвращать True в условии. Не попадайтесь =).

4 комментария:

  1. В точку, только что попался был)

    ОтветитьУдалить
  2. Помоему проще запомнить, что в request'е поля не используют, а используют обычно только функции.

    ОтветитьУдалить
    Ответы
    1. Да как это? Документация как бы намекает, что в Request API полей примерно столько же, сколько и методов. https://docs.djangoproject.com/en/dev/ref/request-response/. Дело в том, что я попадался на эту гадость, и, оказывается, не я один, поэтому черкнул статейку.

      Удалить
  3. Поэтому полез смотреть в инет и увидел вашу запись

    ОтветитьУдалить

В этом гаджете обнаружена ошибка