【问题标题】:Django Wagtail ajax contact formDjango Wagtail ajax 联系表
【发布时间】:2017-11-23 04:30:21
【问题描述】:

我在页脚的每一页底部都有一个联系表单。我只是将它包含在底部的 base.html 中。现在我想想办法提交它。 wagtail 提供的所有示例都假设我有一整页专用于它并因此提交给它自己。

这对我不起作用,因为它不是页面。

我已经编写了我认为应该是什么样子的伪代码。

def submitContact(request): 
        source_email = request.POST.get('email')
        name = request.POST.get('name')
        message = request.POST.get('message')           
        if (source_email is not None) and (name is not None) and (message is not None):
            body = "sample"
            send_mail(
                name,
                message,
                source_email,
                ['test@foobar'],
                fail_silently=False,
            )

那么我的表单会是这样的

<form class="form-group" role="form" method="post" action="/submitContact">
 ......
</form>

理想情况下,如果有人可以指向 Wagtail 资源,这些资源展示了如何在模型中创建端点,这些模型不继承自 Page 模型并且不是维护有用的“请求”内容的 sn-ps。理想情况下,我希望将这些数据记录到联系人“表”中,然后发送电子邮件。

我应该在我的 urls.py 中添加什么以使用正确的上下文重新路由请求,以便函数检索所需的变量并因此发送电子邮件

其他信息

我在页脚周围包裹了一个 sn-p 以使用模板标签为其提供一些上下文,只是把它放在那里以防它增加价值

见下文。

@register.inclusion_tag('home/menus/footer.html', takes_context=True)
def footers(context):
    return {
        'footers': Footers.objects.first(),
        'request': context['request'],
    }

【问题讨论】:

  • 如果您没有从 Page 模型继承,那么对于您要执行的操作实际上并没有 Wagtail 特定的内容,因此 Wagtail 文档不会涵盖这一点 - 您只是编写一个普通的 Django 视图。如果您不熟悉编写 Django 视图,请从这里开始:docs.djangoproject.com/en/1.11/intro/tutorial01
  • 鹡鸰本身有没有更好的方法?
  • 不,可能不是。 Wagtail 旨在与 Django 的功能集一起工作,而不是在它之上的一个层。 Django 擅长的东西有很多,处理表单提交并将它们放入数据库就是其中之一……在这些情况下,直接使用 Django 绝对是正确的做法。

标签: html ajax django wagtail


【解决方案1】:

你应该使用{% url %}模板标签。

urls.py

from django.conf.urls import url
from yourapp.views import submitContact

urlpatterns = [
    url(r'^contact/$', submitContact, name='contact'),
]

模板

<form class="form-group" role="form" method="post" action="{% url 'contact' %}">
 ......
</form>

另一个改进是使用 Django Form。

注意:更喜欢 lower_case_with_underscores 函数的命名风格。对类使用 CamelCase。请参阅PEP8 了解更多信息。

【讨论】:

    【解决方案2】:

    与其尝试自己构建,不如看看 Wagtail 已经存在的 Form Builder?

    它使您能够创建一个 FormPage,您可以在其上显示自定义表单,甚至通过电子邮件发送结果。

    Check out the documentation here.

    【讨论】:

    • OP 明确表示他不希望整个页面专门用于单个表单。
    • 不一定是这样,它只是一个表单,因此可以通过 AJAX 或其他方式轻松实现将数据发布到其中。使用工具包中已有的工具或什至使用其中的部分工具来寻找替代方案也不错。
    • 如果可能的话,您的回答显然缺乏细节。文档中没有提及 Ajax,对于像我这样的初学者,我无法按原样使用您的答案。
    猜你喜欢
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 2016-05-28
    • 2011-06-17
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多