Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 16, 2013 05:34:43

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Reverse of Django CBV

Всем привет.

В Django есть возможность делать reverse для вьюх у которых нет параметра name.
то есть

url(r'^articles/(\d{4})/$', 'news.views.year_archive'),
reverse('news.views.year_archive')

как сделать такое же для CBV ? Это не решения как на меня

Отредактировано Singularity (Дек. 16, 2013 05:42:24)

Офлайн

#2 Дек. 16, 2013 06:03:10

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Reverse of Django CBV

Singularity
В Django есть возможность делать reverse для вьюх у которых нет параметра name
И это отвратительно, не следует практиковать подобный подход, ИМХО.



Офлайн

#3 Дек. 16, 2013 06:30:13

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Reverse of Django CBV

FishHook
а такое нормально ?

Офлайн

#4 Дек. 16, 2013 09:33:49

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Reverse of Django CBV

Приблизительно мысль понятна.
Я бы сделал по другому (если я правильно понял идею), я бы не стал городить неведомое количество url-паттернов, а сделал бы один(или четыре) и соответствующее количество view-диспетчеров, которые возвращают as_view() классов, выбираемых в зависимости от kwarg-ов, из диспетчера.



Офлайн

#5 Дек. 16, 2013 10:47:34

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Reverse of Django CBV

FishHook
view-диспетчер
что это ? Я ничего не понял

Офлайн

#6 Дек. 16, 2013 11:07:02

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Reverse of Django CBV

Я так понял, что у тебя куча однотипных view, для которых ты генерируешь урлы исходя из имени модели.
Я предлагаю обойтись одним урлом, в который ты параметром зашиваешь имя модели

url(r'^(P<model_name>\w+)/$',  dispatcher, name=....),
def dispatcher(request, model_name):
	.....
        
        Тут определяешь какой класс вьюхи нужен
        cbv_class = ....
        .....
         return cbv_class.as_view()(request)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version