2016-10-19 4 views
0

Ich erstelle eine Website mit der Bachstelze CMS. Mein Client möchte ein Formular in einer jQuery-SlideOut-Box, die angezeigt wird, wenn der Benutzer auf eine Schaltfläche klickt. Ich bin nicht sicher, der beste Weg, dies zu tun; Ich habe ein separates Kontaktformular auf der Kontaktseite und die form_page.html Vorlage befindet sich im Ordner /contact. Wo würde ich mein Formular für die jQuery-Box definieren, das auf jeder Seite der Website erscheinen soll? Der Code dafür befindet sich derzeit in der footer.html Vorlagendatei in /site_name/templates/includes.Bachstelze Formular in jQuery SlideOut Box

Gibt es eine Möglichkeit, dies in Wagtail zu tun, oder sollte ich es mit einem separaten Django-Formular tun?

EDIT: Es sieht so aus, als könnte ich möglicherweise ein Snippet verwenden. Ist das der Weg zu gehen?

Jede Hilfe wäre willkommen. Danke im Voraus.

Antwort

1

Es ist unwahrscheinlich, dass ein Snippet hier hilft, weil das Modul wagtailforms um die Idee des Formulars als eine Seite irgendwo in der Seitenstruktur unter einer bestimmten URL entwickelt wurde. Auch wenn das Formular selbst nicht auf einer bestimmten Seite vorhanden ist, muss es eine eindeutige URL für das Formular geben, auf das gepostet werden soll. Snippets haben keine URLs.

Wenn Sie nicht die Möglichkeit haben, Formularfelder innerhalb des Wagtail-Administrators zu definieren, ist ein einfaches Django-Formular (das zu einer einfachen Django-Ansicht posten) die einfachste Route. Um das zu erreichen Form Objekt auf jeder Seite zur Verfügung, würde ich vorschlagen, eine benutzerdefinierte definieren inclusion tag - in myapp/templatetags/myapp_tags.py, haben die folgenden:

from django import template 
register = template.Library() 

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

Dann in Ihrer Vorlage, {% load myapp_tags %} und {% contact_form %}.

Wenn das Formular im Wagtail-Administrator konfigurierbar sein soll, können Sie eine Kombination aus dem obigen Ansatz und dem wagtailforms-Modul verwenden, indem Sie die von Formularseitenmodellen bereitgestellte Methode get_form verwenden. Richten Sie zuerst eine Formularseite unter Verwendung von wagtailforms irgendwo auf Ihrer Website ein - es kann sich um eine tatsächliche Seite handeln, die von Benutzern erwartet wird (aber sie muss veröffentlicht werden und existiert unter einer URL irgendwo). Dann wird die Aufnahme-Tag-Code:

@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} 

(Innerhalb contact_form.html Sie {% pageurl form_page %} als die action des Formulars Attribut verwenden würde, so dass es auf die Formularseite postet Sie eingerichtet haben.)

+0

Das funktionierte , aber mein Formular wird aus irgendeinem Grund nicht geladen. Der Rest der Vorlage funktioniert, aber kein Formular in der Mitte. Ich werde eine separate Frage dafür veröffentlichen. Danke für Ihre Hilfe. – Kim