-
Столкнулся с тем, что reverse вместе с {% url %} имеют нехорошее свойство иногда подглючивать, когда нахимичишь с импортами.
Вопрос, что лучше использовать для указания путей к разным частям сайта? Чем вы пользуетесь чаще и почему? -
Вообще, reverse — без вариантов. Потому что иначе придется хардкодить структуру URL'ов по всему проекту, и это очень плохо. Почему
get_absolute_urlуказано, как противопоставление — не очень понятно. У меня обычно они такие:def get_absolute_url(self): return reverse('viewname', args=[self.id])Но так как не все URL'ы описываются объектами, то и {% url %}, конечно, тоже все время используется.
А вот "подглючивает" — это, видимо, какая-то частая проблема, которую надо просто как-то адекватно решить.
-
Читал книжку Practical Django Projects, в ней Беннетт постоянно использует get_absolute_url, а вот связку get_absolute_url + reverse практически никогда.
Может, это его стиль кодирования.
С подглючиваниями разобрался, нужно импортить только конкретные классы, а не from module import *. Лень, блин..
Странно, у меня вот это работает без проблем
А вот это нет! Причем, reverse('viewname') возвращает свою часть, но аргументы не прицепляются в хвост. self.id по отдельности значение возвращает.def get_absolute_url(self):
return "/%s/%s/" % (str(self.article_type.id), str(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) -
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])А вообще с реверсом никогда никаких проблем не было.
-
Странно, у меня вот это работает без проблем
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.


