2015-07-18 6 views
1

Я работал над приложением, в котором я создал общий ListView. Теперь, при определении этой точки зрения в моем urls.py, я прочитал в документации, что мне нужно использовать метод as_view() следующим образом:Django: Общие представления на основе метода as_view() '

from django.conf.urls import patterns, include, url 
from .views import BlogIndex 

urlpatterns = patterns(
    '', 
    url(r'^$', BlogIndex.as_view(), name="index"), 
) 

Теперь, я не очень понял, что документация должна была сказать об этом методе , Может ли кто-то пролить свет на эту концепцию?

+3

Ваш вопрос не ясен. 'as_view()' - это то, что вы должны вызвать, чтобы связать представление на основе класса в своем URL-адресе. О чем вы спрашиваете? –

+0

@ DanielRoseman Я думаю, вы просто ответили на мой вопрос. Благодарю. –

ответ

9

В взглядах класса на основе, вы должны вызвать as_view() функции так, чтобы вернуть вызываемого вид, который принимает request и возвращает response.Его основная точка входа в цикле запрос-ответ в случае общих взглядов ,

as_view функция (метод класса), который соединит мой MyView класс с его URL.

От django docs:

classmethod as_view (** initkwargs)
Возвращает вызываемый вид, который принимает запрос и возвращает ответ:

Вы просто не можете использовать class- как вы могли бы в обычных функциональных представлениях.

Приведенный выше код недействителен, если вы хотите, чтобы CBVs функционировали должным образом. Для этого вам необходимо предоставить представление, которое можно вызывать, а затем передать ему запрос. Например:

response = MyView.as_view()(request) # valid way 

вызывая функцию as_view() на мой взгляд, класс MyView даст мне представление, которое я буду называть с request параметром, чтобы инициировать цикл запроса-ответа.

В вашем случае:

my_callable_view = BlogIndex.as_view() # returns a callable view 
<function blog.views.BlogIndex> 

Теперь, вызовите эту функцию и передать request.

response = my_callable_view(request) # generate proper response 
0

вид функции имеют различный формат, чем раньше, потому что:

  1. Эта точка зрения фактически будет реализован как класс
  2. Мы будем наследовать от существующей функции общего вида, который уже делает большинство о том, что мы хотим, чтобы эта функция просмотра делала, а не , чем писать наши собственные с нуля.
  3. Метод класса as_view() - это выполняет всю работу по созданию экземпляра класса и следит за тем, чтобы методы прямого обработчика вызывались для входящих HTTP-запросов.

исх: https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/Generic_views