![](/img/trans.png)
[英]URL-parameters and logic in Django class-based views (TemplateView)
[英]How to implement a Django class-based view that is both TemplateView and FormView?
我正在嘗試創建一個使用基於類的視圖的django網頁。 該網頁必須具有以下功能:
我知道如何通過創建一個從django.views.generic.TemplateView
繼承的類來創建一個編號為1的網頁。 我知道如何通過創建一個從django.views.generic.editFormView
繼承的類來創建一個數字為2和3的網頁。 但是我不知道如何制作一個可以同時完成這三個步驟的網頁。 我嘗試創建一個同時繼承自TemplateView
和FormView
的類,但發現我仍然無法獲取HTTP GET數據。 請告知我如何進行這項工作。
這是我相關的urls.py
條目:
url(
r'^myPage/(?P<myArg1>\d+)-(?P<myArg2>\d+)/?$',
myView.as_view(),
name='myName'
),
這是我的視圖類:
class myView(FormView, TemplateView):
template_name = 'myApp/myTemplate.html'
form_class = myForm
success_url = reverse_lazy("successPage")
def get_context_data(self, **kwargs):
context = super(myView, self).get_context_data(**kwargs)
myArg1 = int(kwargs["myArg1"])
myArg2 = int(kwargs["myArg2"])
# Do some validation and some other interesting stuff here based on
# the values of myArg1 and myArg2 and put the result into self.newArg
self.newArg = myDummyFunction(myArg1, myArg2)
context["form"] = self.form_class
return context
def form_valid(self, form):
formField1 = form.cleaned_data.get('field1')
logger.debug("self.newArg = %s" % self.newArg) # <--- This Fails! self.newArg doesn't exist!
return super(myView, self).form_valid(form)
您太復雜了。 就像幾乎所有通用視圖一樣,FormView已經繼承自TemplateView(或者繼承自ContextMixin,后者包含您所需要的所有功能),因此無需在聲明中添加第二個類。
您的代碼不起作用的唯一原因是,當表單有效時,不會調用get_context_data -因為有效表單始終會重定向到另一視圖,因此沒有理由獲取當前視圖的任何上下文數據。 但是您根本不需要在form_valid內部訪問該參數:您應該將其添加到get_context_data內部的上下文字典中,然后您就可以像其他任何上下文變量一樣在模板中訪問它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.