请帮助理解是否可以这样做。 有一个索引页面应该放在联系表格django-contact-form.readthedocs.org
索引中的代码views.py:
def index(request):
args = {}
args.update(csrf(request))
return render_to_response('index.html', args)
contact_form中的代码views.py:
class ContactFormView(FormView):
form_class = ContactForm
template_name = 'contact_form/contact_form.html'
def form_valid(self, form):
form.save()
return super(ContactFormView, self).form_valid(form)
def get_form_kwargs(self):
kwargs = super(ContactFormView, self).get_form_kwargs()
kwargs.update({'request': self.request})
return kwargs
def get_success_url(self):
return reverse('contact_form_sent')
Separetly,这很完美。例如,我们有“example.com/”,联系表单适用于“example.com/contact_form” 它可以在“example.com/”上工作吗?
答案 0 :(得分:0)
如果您希望在所有网页中嵌入表单,通常可以通过context processor添加表单,然后通过action attribute将表单提交操作委托给相应的视图。要让用户保持在他们所在的页面上,您可以添加隐藏的表单元素,例如"下一个"并使用FormView.get_success_url
方法重定向回到以前的视图。
默认情况下,表单视图使用保留的表单'变量,因此您可能希望使用不同的变量名来避免冲突。
这是一个开始
<强> urls.py 强>
urlpatterns += urlpatterns('',
url('^handle_form/$', MyFormView.as_view(), name="handle_form"),
)
<强> views.py 强>
class MyFormView(FormView):
# other stuff
def get_success_url(self):
# get the variable from request.GET.get('next')
# return HttpResponseRedirect(some_view)
<强> template.html 强>
<form action="{% url "handle_form" %}">
<input type="hidden" name="next" value="{% url "...current_page..." %}" />
<!-- other stuff -->
</form>
答案 1 :(得分:0)
是的,您可以使用条件语句优化请求方法类型轻松完成。看看这里 -
在你的view.py中:
from django.template import RequestContext, loader
def index(request):
args = {}
args.update(csrf(request))
template = loader.get_template('template.html')
context = RequestContext(request, {
'form_class': ContactForm,
'args':args,
'success_url': '/',
})
if request.method == 'POST':
form = ContactForm(request.POST)
if form.is_valid():
form.save()
return HttpResponse(template.render(context))