我试图绑定FormView
以在djangocms中显示Form
,但我不能,
我的模型是:
class ContactFormView(FormView, CMSPlugin):
template = '/ContactForm/ContactForm.html'
form_class = contact_form
success_url = reverse_lazy('success-page')
def post(self, request, **kwargs):
assert request.is_ajax()
request_data = json.loads(request.body)
form = self.form_class(data=request_data[self.form_class.scope_prefix])
if form.is_valid():
return JsonResponse({'success_url': force_text(self.success_url)})
else:
response_data = {form.form_name: form.errors}
return JsonResponse(response_data, status=422)
cms_plugins.py:
class ContactFormPlugin(CMSPluginBase):
model = ContactForm.ContactFormView
render_template = '/ContactForm/ContactForm.html'
name = 'Contact Form'
allow_children = False
plugin_pool.register_plugin(ContactFormPlugin)
答案 0 :(得分:0)
看看您在那里所拥有的东西,我不确定您是否为您的插件提供了合适的模型,但有视图!?表单类不是表单类form_class = contact_form
,但是contact_form
是什么?您需要它作为表单的类,例如
class ContactForm(forms.Form):
name = forms.CharField(label='Your name', max_length=100)
email = forms.EmailField(label='Your email', max_length=100)
class ContactFormView(FormView):
template = '/ContactForm/ContactForm.html'
form_class = ContactForm
success_url = reverse_lazy('success-page')
如果您有一个要呈现插件的表单,则需要告诉它该怎么做...
from cms.models.pluginmodel import CMSPlugin
class ContactFormPlugin(CMSPluginBase):
model = CMSPlugin
render_template = '/ContactForm/ContactForm.html'
name = 'Contact Form'
allow_children = False
def render(self, context, instance, placeholder):
context = super(ContactFormPlugin, self).render(context, instance, placeholder)
context['form'] = ContactForm()
return context
但是,您正在使用CMS插件,因此根本不需要为插件定义View
。我认为您可以按照自己的意愿执行此操作,但是视图不想继承CMSPlugin
,因为您只希望视图从插件接收数据。
如果需要定义视图,则说明您正在构建的应用程序在CMS中需要Apphook
而不是插件。 (从技术上讲,您可以在不使用Apphook的情况下发布到URL,但要取决于您想要多少CMS集成)
有一个很好的例子,首先是将插件发布到视图,然后进行应用程序集成,这在这里是可能的; http://docs.django-cms.org/en/latest/introduction/plugins.html