1. Dyadya Zed

    29.08.2008 01:29

    Столкнулся с тем, что reverse вместе с {% url %} имеют нехорошее свойство иногда подглючивать, когда нахимичишь с импортами.

    Вопрос, что лучше использовать для указания путей к разным частям сайта? Чем вы пользуетесь чаще и почему?
  2. Иван Сагалаев

    29.08.2008 03:02

    Вообще, reverse — без вариантов. Потому что иначе придется хардкодить структуру URL'ов по всему проекту, и это очень плохо. Почему get_absolute_url указано, как противопоставление — не очень понятно. У меня обычно они такие:

    def get_absolute_url(self):
        return reverse('viewname', args=[self.id])
    

    Но так как не все URL'ы описываются объектами, то и {% url %}, конечно, тоже все время используется.

    А вот "подглючивает" — это, видимо, какая-то частая проблема, которую надо просто как-то адекватно решить.

  3. Dyadya Zed

    29.08.2008 04:15

    Читал книжку Practical Django Projects, в ней Беннетт постоянно использует get_absolute_url, а вот связку get_absolute_url + reverse практически никогда.
    Может, это его стиль кодирования.

    С подглючиваниями разобрался, нужно импортить только конкретные классы, а не from module import *. Лень, блин..

    Странно, у меня вот это работает без проблем
    def get_absolute_url(self):
    return "/%s/%s/" % (str(self.article_type.id), str(self.id))
    А вот это нет! Причем, reverse('viewname') возвращает свою часть, но аргументы не прицепляются в хвост. self.id по отдельности значение возвращает.
    Мистика какая-то...
    'viewname' - аналог из моего приложения.
    def get_absolute_url(self):
    return reverse('viewname', args=[self.id])
    В документации пишут так (это у меня тоже не работает):
    from django.db.models import permalink

    def get_absolute_url(self):
    return ('viewname', [str(self.id)])
    get_absolute_url = permalink(get_absolute_url)
    Джанга - сегодняшний транк
  4. def get_absolute_url(self): return "/%s/%s/" % (str(self.article_type.id), str(self.id))

    так не эквивалентно этому:

    def get_absolute_url(self): return reverse('viewname', args=[self.id])

    А вообще с реверсом никогда никаких проблем не было.

  5. Иван Сагалаев

    29.08.2008 10:53

    Странно, у меня вот это работает без проблем

    def get_absolute_url(self):
        return "/%s/%s/" % (str(self.article_type.id), str(self.id))
    

    Проблема эти URL'ы менять: уже не только urlconf надо будет трогать, но и все get_absolute_url'ы по коду.

    А вот это нет! Причем, reverse('viewname') возвращает свою часть, но аргументы не прицепляются в хвост. self.id по отдельности значение возвращает. Мистика какая-то... 'viewname' - аналог из моего приложения.

    def get_absolute_url(self):
        return reverse('viewname', args=[self.id])
    

    Как Саша уже заметил, тут по крайней мере нет self.article_type.id в аргументах. Кроме того, поскольку ошибка наверняка именно в деталях, хочется посмотреть и на реальный reverse, и на соответствующую строку в urlconf.

bbcode