2013-07-04 5 views
2

django

Я новичок в django. как в doc я создаю приложение django. в то время как o'm используя класс-представление, я получил ошибку. Я не очень разбирался в представлении, основанном на классе. Может ли кто-нибудь объяснить, что отличает обычный вид. Его же приложение опрос на странице документации по DjangoDjango class-based view

Вот мой код:

class DetailView(generic.DetailView): 
    model = Poll 
    template_name = 'polls/details.html' 
    def get_queryset(self): 

    def detail(request, poll_id): 
     try: 
      poll = Poll.objects.get(pk=poll_id) 
     except Poll.DoesNotExist: 
      raise Http404 
     return render(request, 'polls/details.html', {'poll': poll}) 

*********************Error ******************** 
TypeError at /polls/2/results/ 
as_view() takes exactly 1 argument (3 given) 
Request Method: GET 
Request URL: <app-path>/polls/2/results/ 
Django Version: 1.5.1 
Exception Type: TypeError 
Exception Value:  
as_view() takes exactly 1 argument (3 given)  

*****the url*** 
url(r'^(?P<pk>\d+)/$', views.DetailView.as_view, name='detail') 
+0

Пожалуйста, разместите полный код, который вы используете, так как этот фрагмент не будет работать, потому что у вас есть основная проблема синтаксиса (у вас есть инструкция def wi любой орган). –

ответ

9

as_view следует назвать, не ссылаются, в соответствии с docs, ваш URL должен выглядеть следующим образом:

url(r'^(?P<pk>\d+)/$', views.DetailView.as_view(), name='detail') 

Обратите внимание на использование скобок.

Кроме того, вам следует позвонить в свой класс PollDetailView, чтобы избежать путаницы для считывателей кода.

Кроме того, метод detail(), который вы определили, не будет называться вообще. Поэтому вы не должны определять его вообще. Кроме того, оставьте на данный момент метод get_queryset(), попробуйте сначала запустить основной вид.

+1

'' def detail (request, poll_id): '' также должно быть '' def detail (self, request, poll_id): '' – krak3n

+0

, и у вас есть пустой метод 'get_queryset (self)', который, вероятно, будет поднимать ошибки после устранения проблемы с параметрами –

+0

@ krak3n: вы уверены, что 'generic.DetailView' вообще вызовет' def detail() '? Этот метод, определяемый TO, кажется совершенно бесполезным ... – jpic

1

Поскольку вы не изменяете функциональность просмотра, чтобы использовать этот общий вид, вы можете просто сделать это:

в вашем urls.py (наряду с другими вещами):

from django.views.generic.detail import DetailView 
from poll.models import Poll 

url(r'^(?P<pk>\d+)/$', 
    DetailView.as_view(model=Poll, 
         template_name='polls/details.html'), name='detail') 

Тогда в poll/details.html, вам нужно всего лишь:

{{ object }}