2016-10-19 11 views
0

私はWagtail CMSを使用してウェブサイトを作成しています。私のクライアントは、ユーザーがボタンをクリックしたときに表示されるjQuery SlideOut Boxのフォームを希望します。私はこれについての最善の方法を確信していません。連絡先ページにも別の連絡先フォームがあります。form_page.htmlテンプレートは/contactフォルダにあります。サイトのすべてのページに表示されるjQueryボックスのフォームをどこで定義しますか?そのコードは現在、footer.htmlテンプレートファイル/site_name/templates/includesの中にあります。jQuery SlideOut BoxのWagtailフォーム

Wagtailでこれを行う方法はありますか、別のDjangoフォームで調べるべきでしょうか?

EDIT:おそらくスニペットを使用できるようです。これは道のりですか?

ご協力いただければ幸いです。前もって感謝します。

答えて

1

wagtailformsモジュールは、特定のURLのページツリーのどこかにページとして存在するフォームの考え方を基にして設計されているため、スニペットが役に立ちません。フォーム自体が特にいずれのページにも掲載されていない場合でも、フォームのURLを明確に定義しておく必要があります。スニペットにはURLがありません。

Wagtail管理者のフォームフィールドを定義する必要がない場合は、プレーンなDjangoフォーム(プレーンなDjangoビューへの投稿)が最も簡単なルートです。

from django import template 
register = template.Library() 

@register.inclusion_tag('myapp/tags/contact_form.html') 
def contact_form(): 
    form = ContactForm() 
    return {'form': form} 

その後、テンプレート内、{% load myapp_tags %}{% contact_form %}: - すべてのページにそのフォームオブジェクトを使用できるようにするために、私は、カスタムinclusion tagを定義することをお勧めしたいmyappに/ templatetags/myapp_tags.pyで、次があります。

Wagtailの管理者でフォームを設定したい場合は、フォームページモデルで提供されるget_formメソッドを利用して、上記の方法とwagtailformsモジュールの組み合わせを使用できます。最初に、サイトのどこかにwagtailformsを使用してフォームページを設定します。実際にページが表示されることがあります(ただし、公開する必要があります。のURLに存在する必要があります)。その後、封入タグコードは次のようになります。

@register.inclusion_tag('myapp/tags/contact_form.html') 
def contact_form(): 
    form_page = ContactFormPage.objects.get(slug='contact-us') 
    form = form_page.get_form() 
    return {'form_page': form_page, 'form': form} 

(それはあなたが設定したフォームページに投稿するようcontact_form.htmlの中で、あなたがフォームのaction属性として{% pageurl form_page %}を使用します。)

+0

これは働いていましたしかし、私のフォームは何らかの理由でロードされていません。残りのテンプレートは機能しますが、途中にはフォームはありません。私は別の質問を投稿します。ご協力いただきありがとうございます。 – Kim

関連する問題