LXG*_*LXG 13 forms django django-templates
我有一些问题要弄清楚新的django视图(模板视图)和表单是如何工作的我也找不到好资源,官方文档不解释我如何获取请求(我的意思是获取和发布)和新的表单django观看课程
谢谢
添加了更好的解释
例如,我有这样的形式:
from django import forms
class ContactForm(forms.Form):
subject = forms.CharField(max_length=100)
message = forms.CharField()
sender = forms.EmailField()
cc_myself = forms.BooleanField(required=False)
Run Code Online (Sandbox Code Playgroud)
这是用于读取和打印表单的代码(旧时尚方式):
def contact(request):
if request.method == 'POST': # If the form has been submitted...
form = ContactForm(request.POST) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
# Process the data in form.cleaned_data
# ...
return HttpResponseRedirect('/thanks/') # Redirect after POST
else:
form = ContactForm() # An unbound form
return render_to_response('contact.html', {
'form': form,
})
Run Code Online (Sandbox Code Playgroud)
好吧,我的问题是如何用模板视图做同样的事情谢谢
rad*_*tek 36
请改用FormView,即
from django.views.generic import TemplateView, FormView
from forms import ContactUsEmailForm
class ContactView(FormView):
template_name = 'contact_us/contact_us.html'
form_class = ContactUsEmailForm
success_url = '.'
def get_context_data(self, **kwargs):
context = super(ContactView, self).get_context_data(**kwargs)
#context["testing_out"] = "this is a new context var"
return context
def form_valid(self, form):
# This method is called when valid form data has been POSTed.
# It should return an HttpResponse.
#form.send_email()
#print "form is valid"
return super(ContactView, self).form_valid(form)
Run Code Online (Sandbox Code Playgroud)
有关Django Docs中FormView的更多信息
从技术上讲,也可以使用TemplateView,只是覆盖post方法,因为默认模板视图不允许你发布到它:
class ContactUsView(TemplateView):
template_name = 'contact_us/contact_us.html'
def post(self, request, *args, **kwargs):
context = self.get_context_data()
if context["form"].is_valid():
print 'yes done'
#save your model
#redirect
return super(TemplateView, self).render_to_response(context)
def get_context_data(self, **kwargs):
context = super(ContactUsView, self).get_context_data(**kwargs)
form = ContactUsEmailForm(self.request.POST or None) # instance= None
context["form"] = form
#context["latest_article"] = latest_article
return context
Run Code Online (Sandbox Code Playgroud)
我认为FormView更有意义.
And*_*asT 15
我建议只是通过官方教程,我认为实现将黎明,启蒙将自动到来.
基本上:当你发出请求时:'''http:// mydomain/myblog/foo/bar'''Django会:
myblog/foo/bar通过urls.py中定义的模式解析函数/方法调用myblog.views.foo_bar_index(request).视图函数通常执行以下操作:
模板通用视图允许您跳过编写该函数,并只传入上下文字典.
引用django文档:
from django.views.generic import TemplateView
class AboutView(TemplateView):
template_name = "about.html"
Run Code Online (Sandbox Code Playgroud)
所有views.generic.*视图类都以views.generic.View为基础.在文档中,您可以找到所需的信息.基本上:
# urls.py
urlpatterns = patterns('',
(r'^view/$', MyView.as_view(size=42)),
)
Run Code Online (Sandbox Code Playgroud)
MyView.as_view将生成一个调用views.generic.View.dispatch()的callable,后者将调用您可以覆盖的MyView.get(),MyView.post(),MyView.update()等.
引用文档:
课程视图
派遣(请求,*args,**kwargs)
视图的视图部分 - 接受请求参数和参数的方法,并返回HTTP响应.默认实现将检查HTTP方法并尝试委托给与HTTP方法匹配的方法; 一个GET将被委托给get(),一个POST到post(),依此类推.
默认实现还将request,args和kwargs设置为实例变量,因此视图上的任何方法都可以知道调用视图的请求的完整详细信息.
基于类的观点的大加分(在我看来):
| 归档时间: |
|
| 查看次数: |
28424 次 |
| 最近记录: |