2016-05-22 2 views
0

Я создал форму подписки в Wagtail Form Builder, когда форма отправлена ​​из шаблона subscribe_form.html, представление проходит успешно.Формы, не отправляемые при использовании тега include

<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 "home/subscribe_form.html" %} 

Может кто-нибудь, пожалуйста, сообщите, что может привести к тому, что форма не будет отправлена ​​при использовании тега include?

+3

Вы не можете включить шаблон в это место. Шаблон должен вызываться с соответствующим контекстом, в котором заданы переменные 'form',' page', которые бы произошли в модели 'Page', которая имеет форму. – solarissmoke

+1

Что говорит @solarissmoke правильно. Я предлагаю вам создать тег шаблона, который инициализирует форму и страницу - https://docs.djangoproject.com/en/1.9/howto/custom-template-tags/ – dotcomly

+0

@solarissmoke, благодарю вас за то, что вы прояснили процесс, необходимый для достижения это. – Leo

ответ

1

Чтобы уточнить, что говорили другие, использование специального тега шаблона для этого - простой способ сделать это. Теги Inclusion позволяют вызывать тег шаблона и передавать им аргументы/kwargs, выполнять логику и затем отображать шаблон с этой логикой для включения в вашу отображаемую страницу.

В каталоге приложений для вашего проекта создать папку, создать реж с именем templatetags, создайте пустой файл в том, что с именем __init__.py (Django использует это, чтобы знать, файл должен быть запущен при запуске), а затем создать еще один файл новое имя dir 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, встроенная в модель).

+0

очень полезно и подробное объяснение. – Leo

Смежные вопросы