製品アプリケーションが 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 リクエストを受け入れる。