2015-12-11 1 views
2

Я хотел бы знать, можно ли создать только собственный класс для моих представлений в django, который может быть действителен для разных URL-адресов.Виды на основе Django. Используйте тот же пользовательский класс для разных URL-адресов

Например:

#urls.py 
url(r'^$', CustomClass.as_view(), name='index'), 
url(r'^other_url/(?P<example>[-\w]+)$', CustomClass.as_view(), name='other') 

#views.py 
CustomClass(View): 
    # for/url 
    def first_method(self, request): 
     pass 
    # for other_url/ 
    def second_method(self, request, example): 
     pass 

Я прочтенная документация о представлениях на основе класса, но в данном примере говорит только об одном URL ... https://docs.djangoproject.com/en/1.9/topics/class-based-views/intro/

Итак, я полагаю, я должен создайте класс для каждого URL-адреса. Но можно ли использовать один и тот же класс с разными методами для разных URL-адресов?

ответ

2

Вам не нужно создавать разные классы для разных URL-адресов. Несмотря на то, что это довольно излишним иметь тот же класс в разные адреса, вы можете сделать:

url(r'^$', CustomClass.as_view(), name='index'), 
url(r'^other_url/(?P<example>[-\w]+)$', CustomClass.as_view(), name='other') 

именно то, что вы делаете. Существуют случаи, когда у вас есть общий класс, который вы хотите использовать (либо общий из модуля/пакета generics, либо общий в смысле ООП). Скажем, пример:

url(r'^$', CustomBaseClass.as_view(), name='index'), 
url(r'^other_url/(?P<example>[-\w]+)$', CustomChildClass.as_view(), name='other') 

Или даже тот же класс, только с разной конфигурацией (относительно общих классов (по убыванию из View): Сдан названные параметры зависят от того, как они определены в классе):

url(r'^$', AGenericClass.as_view(my_model=AModel), name='index'), 
url(r'^other_url/(?P<example>[-\w]+)$', AGenericClass.as_view(my_model=Other), name='other') 

Сводка У вас нет ограничений вообще при использовании общих представлений или при передаче любого вида вызываемого вызова при использовании url.

+0

спасибо. Я попробую второй или третий пример. Потому что в первом примере я не знаю, как вызывать разные методы для разных URL-адресов, используя один и тот же класс ... Может быть с параметром в as_view (method = 'first_method') – dac777

+0

Дженерики предназначены для использования как во втором пример (по наследованию) или даже третий (хотя я бы этого не сделал, но это разрешено). –

+0

Спасибо за ваш совет! Значит, для каждого URL-адреса лучше независимый класс? Я хотел бы узнать лучшие практики ... – dac777