假设您的产品应用程序按预期工作没有 Django CMS,您接下来要做的是创建自己的插件来显示表单。该插件将呈现您已经使用您创建的插件模板在您自己的应用程序中定义的表单。
此联系表单插件允许将联系表单插入页面模板中占位符允许的任何位置。
class ContactPlugin(CMSPluginBase):
"""Enables latest event to be rendered in CMS"""
model = CMSPlugin
name = "Form: Contact"
render_template = "contact_form/contact_plugin.html"
def render(self, context, instance, placeholder):
request = context['request']
context.update({
'instance': instance,
'placeholder': placeholder,
'form': ContactForm(request=request),
})
return context
模板将包含呈现表单所需的所有 HTML 和 Django 模板语言。
这个其他联系表单插件展示了另一个如何做到这一点的例子。它只是更新上下文,而不是呈现表单。好处是您不必创建单独的模板,但坏处是您失去了拥有插件的一些模块化。这取决于呈现表单的页面模板。
class ContactPlugin(CMSPluginBase):
model = Contact
name = _("Contact Form")
render_template = "contact.html"
def render(self, context, instance, placeholder):
request = context['request']
if request.method == "POST":
form = ContactForm(request.POST)
if form.is_valid():
form.send(instance.site_email)
context.update( {
'contact': instance,
})
return context
else:
form = ContactForm()
context.update({
'contact': instance,
'form': form,
})
return context
在任何一种情况下,您仍然必须定义视图以接受表单提交,这意味着您需要在 CMS 之外创建一个视图,以确认收到带有自己模板的表单,将用户重定向回引用页面,和/或接受 AJAX 请求。