При условии, что приложение вашего продукта работает как положено без 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.