입력을 받아서 URL에 CBV를 사용하여 추가하는 양식이 필요합니다. 예를 들어, 5를 입력하면 일부 처리 (쿼리/사용자 정의 함수)를 수행하고/order/5/details/order number 5의 세부 정보를 표시해야합니다. On/order/5/details/일정에 맞으면/order/5/schedule 등으로 라우트해야합니다.Django 클래스 기반 뷰 (FormView, TemplateView, DetailView) 및 URL
기본적으로 제 질문은 - CBV를 사용하여 어떻게 달성 할 수 있습니까? CBV는 물체에만 연결되어 있습니까? 나는이 특별히 클래스 기반의 전망과 관련이있다 무엇을 볼 수 없습니다
#order/forms.py
from django import forms
class OrderForm(forms.Form):
order_id = forms.IntegerField()
#order/views.py
class OrderFormView(FormView):
# form to enter Id
form_class = OrderForm
success_url = '/order/detail/'
template_name = 'order/order_form.html'
@method_decorator(login_required(login_url='/order/login/'))
def dispatch(self, request, *args, **kwargs):
return super(OrderFormView, self).dispatch(request, *args, **kwargs)
def form_valid(self, form):
order_id = self.request.POST['order_id'] # this or get method?
return HttpResponseRedirect(self.get_success_url(), {'order_id': order_id})
def form_invalid(self, form):
return self.render_to_response(self.get_context_data(form=form))
def get_context_data(self, **kwargs):
context = super(OrderFormView, self).get_context_data(**kwargs)
context['name'] = self.request.user.username
return context
class OrderDetailView(TemplateView):
template_name = 'order/order_detail.html'
@method_decorator(login_required(login_url='/order/login'))
def dispatch(self, request, *args, **kwargs):
return super(OrderDetailView, self).dispatch(request, *args, **kwargs)
def get(self, request, *args, **kwargs):
context = self.get_context_data(**kwargs)
return self.render_to_response(context)
def get_context_data(self, **kwargs):
context = super(OrderDetailView, self).get_context_data(**kwargs)
context['name'] = self.request.user.username
return context
#urls
url(r'^order/$', OrderFormView.as_view(), name='order-form'),
url(r'^order/(?P<order_id>\d+)/orderdetails/$', tasks.views.TaskDetailView.as_view(), name='tasks-detail'),