我在Wagtail Form Builder中创建了一个订阅表单,当表单从其模板subscribe_form.html提交时,提交成功完成。
<form action="{% pageurl page %}" method="POST">
{% csrf_token %}
<div class="shop-subscribe bg-color-green margin-bottom-40">
<div class="container">
<div class="row">
<div class="col-md-8 md-margin-bottom-20">
<h2>Subscribase para mantenerse<strong> informado</strong></h2>
</div>
<div class="col-md-4">
<div class="input-group">
<input type="text" class="form-control" placeholder="Correo Electronico..." {{ form.subscribase }}>
<span class="input-group-btn">
<button class="btn" type="submit"><i class="fa fa-envelope-o"></i></button>
</span>
</div>
{{ form.subscribase.errors }}
</div>
</div>
</div><!--/end container-->
</div>
</form>
但是,当我使用include标记将其包含在其他页面上时,它不会提交,并且我没有收到任何错误消息。
{% include "home/subscribe_form.html" %}
有人可以建议在使用include标签时可能导致表单不提交的内容吗?
答案 0 :(得分:1)
要详细说明其他人所说的内容,使用自定义模板标记是一种简单的方法。包含标记允许您调用模板标记并将args / kwargs传递给它们,执行逻辑,然后使用该逻辑呈现模板以包含在您呈现的页面中。
在项目的app目录中创建一个文件夹,创建一个名为templatetags
的目录,在名为__init__.py
的内部创建一个空文件(Django使用它来知道文件应该在启动时运行) ,然后在新目录名my_custom_tags.py
(或您想要使用的任何内容)中创建另一个文件。在那 -
from django.template import Library
register = Library()
@register.inclusion_tag("home/subscribe_form.html")
def subscription_form(form):
return {'form':form}
现在,在您的主模板中:
{% load my_custom_tags %}
{# (or whatever you named your file for custom tags #}
{# where you want to include your tag, pass the form from the main template; be sure to pass your form variable from your context data #}
{% subscription_form form %}
您已经渲染了表单。由于您是从上下文传递表单,因此在模板标记外执行的任何逻辑仍然完好无损。当您有一个通用模板用于多个位置的元素但需要在视图外部执行逻辑时(或者,在Wigtail的情况下,模型中嵌入的Page / snippet逻辑),这尤其有用。