使用 include 标签时不提交表单
Forms not submitting when using the include tag
我在 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 标签时可能导致表单不提交的原因?
为了详细说明其他人所说的内容,为此使用自定义模板标签是一种简单的方法。包含标记允许您调用模板标记并将 args/kwargs 传递给它们,执行逻辑,然后使用该逻辑呈现模板以包含在您呈现的页面中。
在项目的应用程序目录中创建一个文件夹,创建一个名为 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 %}
您已呈现表单。由于您是从上下文传递表单,因此在模板标记之外执行的任何逻辑仍然完好无损。当您有一个通用模板用于多个位置的元素但需要在视图外部执行逻辑时(或者,在 Wagtail 的情况下,模型中嵌入的 Page/snippet 逻辑),这尤其有用。
我在 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 标签时可能导致表单不提交的原因?
为了详细说明其他人所说的内容,为此使用自定义模板标签是一种简单的方法。包含标记允许您调用模板标记并将 args/kwargs 传递给它们,执行逻辑,然后使用该逻辑呈现模板以包含在您呈现的页面中。
在项目的应用程序目录中创建一个文件夹,创建一个名为 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 %}
您已呈现表单。由于您是从上下文传递表单,因此在模板标记之外执行的任何逻辑仍然完好无损。当您有一个通用模板用于多个位置的元素但需要在视图外部执行逻辑时(或者,在 Wagtail 的情况下,模型中嵌入的 Page/snippet 逻辑),这尤其有用。