Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “Django脆饼”;提供给{%crispy%}标记的帮助对象必须是crispy.helper.FormHelper对象";使用布局切片时_Python_Django_Django Crispy Forms - Fatal编程技术网

Python “Django脆饼”;提供给{%crispy%}标记的帮助对象必须是crispy.helper.FormHelper对象";使用布局切片时

Python “Django脆饼”;提供给{%crispy%}标记的帮助对象必须是crispy.helper.FormHelper对象";使用布局切片时,python,django,django-crispy-forms,Python,Django,Django Crispy Forms,我得到一个提供给{%crispy%}标记的帮助对象必须是crispy.helper.FormHelper对象错误,当尝试访问表单的一个片段时。如下面的forms.py所示,我想使用布局片()访问第一个Div,这样我就可以在HTML的选项卡中只显示该Div。在下面的ref\u detail.html中,我尝试使用{%crispy form\u helper.0%}来实现这一点。我也尝试过{%crispy form\u helper[0]]},但这也不起作用 python版本3.8.3 django

我得到一个提供给{%crispy%}标记的
帮助对象必须是crispy.helper.FormHelper对象
错误,当尝试访问表单的一个片段时。如下面的forms.py所示,我想使用布局片()访问第一个
Div
,这样我就可以在HTML的选项卡中只显示该Div。在下面的ref\u detail.html中,我尝试使用
{%crispy form\u helper.0%}
来实现这一点。我也尝试过
{%crispy form\u helper[0]]}
,但这也不起作用

python版本3.8.3 django版本3.1.2

视图.py

from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render
from django.urls import reverse_lazy

from crispy_forms.utils import render_crispy_form

from .models import reference
from .forms import ReferenceForm

def ref_detail(request, ref_id):

    try:
        ref = reference.objects.get(pk=ref_id)
    except ref.DoesNotExist:
        raise Http404("Reference does not exist")
    
    #If this is a POST request, process the form data
    if request.method == 'POST':
        #create a form instance and populate it with data from the request
        form = ReferenceForm(request.POST)
        #check whether it's valid
        if form.is_valid():
            #process the data in form.cleaned_data as required (i.e. save to database, etc.)
            #...
            print(form.cleaned_data)
            new_reference = form.save() #save a new reference object to the database, from the form's data
            #redirect to a new URL:
            return HttpResponseRedirect('thanks/')
    #if a GET (or any other method) we'll create a blank form
    else:
        form = ReferenceForm()
    
    return render(request, 'test_cedar_app/ref_detail.html', {'ref': ref, 'form': form, 'form_helper': form.helper})
from django.forms import ModelForm
from django import forms
from test_cedar_app.models import factor, reference
from django.utils.translation import gettext_lazy as _

from crispy_forms.bootstrap import Tab, TabHolder, FormActions
from crispy_forms.helper import FormHelper
from crispy_forms.layout_slice import LayoutSlice
from crispy_forms.layout import Submit, Layout, Div
from crispy_forms.utils import render_crispy_form

class ReferenceForm(ModelForm):
    class Meta:
        model = reference
        fields = '__all__'
        
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.form_tag = False
        self.helper.layout = Layout(
            Div('study_title', 
                'name_author',
                'publication_year',
                'publisher',
                'ident_doi',
                'ident_pmid',
                'exclude_extraction',
                'exclude_extraction_reason',
                css_id='main-tab-md',
                css_class='tab-pane fade show active',
            ), 
            Div('study_design',
                'study_design_detail',
                'study_sample_method',
                'ast_method',
                'has_breakpoint',
                'has_mic_table',
                css_id='study-tab-md',
                css_class='tab-pane fade',
            ),
        )
{% extends './base.html' %}

<!-- {% load static %} -->

{% load crispy_forms_tags %}

{% load widget_tweaks %}


{% block content %}
    <form action="" method="post" id="leadform" enctype="multipart/form-data" role="form">
        {% csrf_token %}
        <ul class="nav nav-tabs md-tabs" id="myTabMD" role="tablist">
            <li class="nav-item">
                <a class="nav-link active" id="main-tab-md" data-toggle="tab" href="#main-md" role="tab" aria-controls="main-md"
                    aria-selected="true">Main</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" id="study-tab-md" data-toggle="tab" href="#study-md" role="tab" aria-controls="study-md"
                    aria-selected="false">Study Design</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" id="location-tab-md" data-toggle="tab" href="#location-md" role="tab" aria-controls="location-md"
                    aria-selected="false">Location</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" id="history-tab-md" data-toggle="tab" href="#history-md" role="tab" aria-controls="history-md"
                    aria-selected="false">History</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" id="notes-tab-md" data-toggle="tab" href="#notes-md" role="tab" aria-controls="notes-md"
                    aria-selected="false">Notes and Issues</a>
            </li>
        </ul>
        <div class="tab-content card pt-5" id="myTabContentMD">
            <div class="tab-pane fade show active" id="main-md" role="tabpanel" aria-labelledby="main-tab-md">
                {% crispy form form_helper.0 %}
            </div>
            <div class="tab-pane fade" id="study-md" role="tabpanel" aria-labelledby="study-tab-md">
                <p>Study</p>
            </div>
            <div class="tab-pane fade" id="location-md" role="tabpanel" aria-labelledby="location-tab-md">
                <p>Location</p>
            </div>
            <div class="tab-pane fade" id="history-md" role="tabpanel" aria-labelledby="history-tab-md">
                <p>History</p>
            </div>
            <div class="tab-pane fade" id="notes-md" role="tabpanel" aria-labelledby="notes-tab-md">
                <p>Notes</p>
            </div>
        </div>
    </form>
{% endblock %}
{% load static %}

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
    <title>Update a Reference</title>
    <script src="http://code.jquery.com/jquery-1.9.1.js">
    </script>
    <script src="http://code.jquery.com/ui/1.11.0/jquery-ui.js">
    </script>
    <script type="text/javascript" src="{% static 'bootstrap-tab.js' %}"> </script>

    <!-- MDB icon -->
    <link rel="icon" href="{% static 'img/mdb-favicon.ico' %}" type="image/x-icon">
    <!-- Font Awesome -->
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.11.2/css/all.css">
    <!-- Google Fonts Roboto -->
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap">
    <!-- Bootstrap core CSS -->
    <link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
    <!-- Material Design Bootstrap -->
    <link rel="stylesheet" href="{% static 'css/mdb.min.css' %}">
    <!-- Your custom styles (optional) - -->
    
  </head>
  <body>
    <div class="container">
      <div class="row justify-content-left">
        <div class="col-8">
          <h1 class="mt-2">{{ref.study_title}}</h1>
          <hr class="mt-0 mb-4">
          {% block content %}
          {% endblock %}
        </div>
      </div>
    </div>

    <!-- SCRIPTS -->
    <!-- jQuery -->
    <script type="text/javascript" src="{% static 'js/jquery.min.js' %}"></script>
    <!-- Bootstrap tooltips -->
    <script type="text/javascript" src="{% static 'js/popper.min.js' %}"></script>
    <!-- Bootstrap core JavaScript -->
    <script type="text/javascript" src="{% static 'js/bootstrap.min.js' %}"></script>
    <!-- MDB core JavaScript -->
    <script type="text/javascript" src="{% static 'js/mdb.min.js' %}"></script>
    <!-- MDBootstrap Datatables  -->
    <!-- <script type="text/javascript" src="{% static 'js/addons/datatables.min.js' %}"></script> -->
    <!-- Your custom scripts (optional) -->

  </body>
</html>
forms.py

from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render
from django.urls import reverse_lazy

from crispy_forms.utils import render_crispy_form

from .models import reference
from .forms import ReferenceForm

def ref_detail(request, ref_id):

    try:
        ref = reference.objects.get(pk=ref_id)
    except ref.DoesNotExist:
        raise Http404("Reference does not exist")
    
    #If this is a POST request, process the form data
    if request.method == 'POST':
        #create a form instance and populate it with data from the request
        form = ReferenceForm(request.POST)
        #check whether it's valid
        if form.is_valid():
            #process the data in form.cleaned_data as required (i.e. save to database, etc.)
            #...
            print(form.cleaned_data)
            new_reference = form.save() #save a new reference object to the database, from the form's data
            #redirect to a new URL:
            return HttpResponseRedirect('thanks/')
    #if a GET (or any other method) we'll create a blank form
    else:
        form = ReferenceForm()
    
    return render(request, 'test_cedar_app/ref_detail.html', {'ref': ref, 'form': form, 'form_helper': form.helper})
from django.forms import ModelForm
from django import forms
from test_cedar_app.models import factor, reference
from django.utils.translation import gettext_lazy as _

from crispy_forms.bootstrap import Tab, TabHolder, FormActions
from crispy_forms.helper import FormHelper
from crispy_forms.layout_slice import LayoutSlice
from crispy_forms.layout import Submit, Layout, Div
from crispy_forms.utils import render_crispy_form

class ReferenceForm(ModelForm):
    class Meta:
        model = reference
        fields = '__all__'
        
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.form_tag = False
        self.helper.layout = Layout(
            Div('study_title', 
                'name_author',
                'publication_year',
                'publisher',
                'ident_doi',
                'ident_pmid',
                'exclude_extraction',
                'exclude_extraction_reason',
                css_id='main-tab-md',
                css_class='tab-pane fade show active',
            ), 
            Div('study_design',
                'study_design_detail',
                'study_sample_method',
                'ast_method',
                'has_breakpoint',
                'has_mic_table',
                css_id='study-tab-md',
                css_class='tab-pane fade',
            ),
        )
{% extends './base.html' %}

<!-- {% load static %} -->

{% load crispy_forms_tags %}

{% load widget_tweaks %}


{% block content %}
    <form action="" method="post" id="leadform" enctype="multipart/form-data" role="form">
        {% csrf_token %}
        <ul class="nav nav-tabs md-tabs" id="myTabMD" role="tablist">
            <li class="nav-item">
                <a class="nav-link active" id="main-tab-md" data-toggle="tab" href="#main-md" role="tab" aria-controls="main-md"
                    aria-selected="true">Main</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" id="study-tab-md" data-toggle="tab" href="#study-md" role="tab" aria-controls="study-md"
                    aria-selected="false">Study Design</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" id="location-tab-md" data-toggle="tab" href="#location-md" role="tab" aria-controls="location-md"
                    aria-selected="false">Location</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" id="history-tab-md" data-toggle="tab" href="#history-md" role="tab" aria-controls="history-md"
                    aria-selected="false">History</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" id="notes-tab-md" data-toggle="tab" href="#notes-md" role="tab" aria-controls="notes-md"
                    aria-selected="false">Notes and Issues</a>
            </li>
        </ul>
        <div class="tab-content card pt-5" id="myTabContentMD">
            <div class="tab-pane fade show active" id="main-md" role="tabpanel" aria-labelledby="main-tab-md">
                {% crispy form form_helper.0 %}
            </div>
            <div class="tab-pane fade" id="study-md" role="tabpanel" aria-labelledby="study-tab-md">
                <p>Study</p>
            </div>
            <div class="tab-pane fade" id="location-md" role="tabpanel" aria-labelledby="location-tab-md">
                <p>Location</p>
            </div>
            <div class="tab-pane fade" id="history-md" role="tabpanel" aria-labelledby="history-tab-md">
                <p>History</p>
            </div>
            <div class="tab-pane fade" id="notes-md" role="tabpanel" aria-labelledby="notes-tab-md">
                <p>Notes</p>
            </div>
        </div>
    </form>
{% endblock %}
{% load static %}

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
    <title>Update a Reference</title>
    <script src="http://code.jquery.com/jquery-1.9.1.js">
    </script>
    <script src="http://code.jquery.com/ui/1.11.0/jquery-ui.js">
    </script>
    <script type="text/javascript" src="{% static 'bootstrap-tab.js' %}"> </script>

    <!-- MDB icon -->
    <link rel="icon" href="{% static 'img/mdb-favicon.ico' %}" type="image/x-icon">
    <!-- Font Awesome -->
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.11.2/css/all.css">
    <!-- Google Fonts Roboto -->
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap">
    <!-- Bootstrap core CSS -->
    <link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
    <!-- Material Design Bootstrap -->
    <link rel="stylesheet" href="{% static 'css/mdb.min.css' %}">
    <!-- Your custom styles (optional) - -->
    
  </head>
  <body>
    <div class="container">
      <div class="row justify-content-left">
        <div class="col-8">
          <h1 class="mt-2">{{ref.study_title}}</h1>
          <hr class="mt-0 mb-4">
          {% block content %}
          {% endblock %}
        </div>
      </div>
    </div>

    <!-- SCRIPTS -->
    <!-- jQuery -->
    <script type="text/javascript" src="{% static 'js/jquery.min.js' %}"></script>
    <!-- Bootstrap tooltips -->
    <script type="text/javascript" src="{% static 'js/popper.min.js' %}"></script>
    <!-- Bootstrap core JavaScript -->
    <script type="text/javascript" src="{% static 'js/bootstrap.min.js' %}"></script>
    <!-- MDB core JavaScript -->
    <script type="text/javascript" src="{% static 'js/mdb.min.js' %}"></script>
    <!-- MDBootstrap Datatables  -->
    <!-- <script type="text/javascript" src="{% static 'js/addons/datatables.min.js' %}"></script> -->
    <!-- Your custom scripts (optional) -->

  </body>
</html>
参考detail.html

from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render
from django.urls import reverse_lazy

from crispy_forms.utils import render_crispy_form

from .models import reference
from .forms import ReferenceForm

def ref_detail(request, ref_id):

    try:
        ref = reference.objects.get(pk=ref_id)
    except ref.DoesNotExist:
        raise Http404("Reference does not exist")
    
    #If this is a POST request, process the form data
    if request.method == 'POST':
        #create a form instance and populate it with data from the request
        form = ReferenceForm(request.POST)
        #check whether it's valid
        if form.is_valid():
            #process the data in form.cleaned_data as required (i.e. save to database, etc.)
            #...
            print(form.cleaned_data)
            new_reference = form.save() #save a new reference object to the database, from the form's data
            #redirect to a new URL:
            return HttpResponseRedirect('thanks/')
    #if a GET (or any other method) we'll create a blank form
    else:
        form = ReferenceForm()
    
    return render(request, 'test_cedar_app/ref_detail.html', {'ref': ref, 'form': form, 'form_helper': form.helper})
from django.forms import ModelForm
from django import forms
from test_cedar_app.models import factor, reference
from django.utils.translation import gettext_lazy as _

from crispy_forms.bootstrap import Tab, TabHolder, FormActions
from crispy_forms.helper import FormHelper
from crispy_forms.layout_slice import LayoutSlice
from crispy_forms.layout import Submit, Layout, Div
from crispy_forms.utils import render_crispy_form

class ReferenceForm(ModelForm):
    class Meta:
        model = reference
        fields = '__all__'
        
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.form_tag = False
        self.helper.layout = Layout(
            Div('study_title', 
                'name_author',
                'publication_year',
                'publisher',
                'ident_doi',
                'ident_pmid',
                'exclude_extraction',
                'exclude_extraction_reason',
                css_id='main-tab-md',
                css_class='tab-pane fade show active',
            ), 
            Div('study_design',
                'study_design_detail',
                'study_sample_method',
                'ast_method',
                'has_breakpoint',
                'has_mic_table',
                css_id='study-tab-md',
                css_class='tab-pane fade',
            ),
        )
{% extends './base.html' %}

<!-- {% load static %} -->

{% load crispy_forms_tags %}

{% load widget_tweaks %}


{% block content %}
    <form action="" method="post" id="leadform" enctype="multipart/form-data" role="form">
        {% csrf_token %}
        <ul class="nav nav-tabs md-tabs" id="myTabMD" role="tablist">
            <li class="nav-item">
                <a class="nav-link active" id="main-tab-md" data-toggle="tab" href="#main-md" role="tab" aria-controls="main-md"
                    aria-selected="true">Main</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" id="study-tab-md" data-toggle="tab" href="#study-md" role="tab" aria-controls="study-md"
                    aria-selected="false">Study Design</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" id="location-tab-md" data-toggle="tab" href="#location-md" role="tab" aria-controls="location-md"
                    aria-selected="false">Location</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" id="history-tab-md" data-toggle="tab" href="#history-md" role="tab" aria-controls="history-md"
                    aria-selected="false">History</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" id="notes-tab-md" data-toggle="tab" href="#notes-md" role="tab" aria-controls="notes-md"
                    aria-selected="false">Notes and Issues</a>
            </li>
        </ul>
        <div class="tab-content card pt-5" id="myTabContentMD">
            <div class="tab-pane fade show active" id="main-md" role="tabpanel" aria-labelledby="main-tab-md">
                {% crispy form form_helper.0 %}
            </div>
            <div class="tab-pane fade" id="study-md" role="tabpanel" aria-labelledby="study-tab-md">
                <p>Study</p>
            </div>
            <div class="tab-pane fade" id="location-md" role="tabpanel" aria-labelledby="location-tab-md">
                <p>Location</p>
            </div>
            <div class="tab-pane fade" id="history-md" role="tabpanel" aria-labelledby="history-tab-md">
                <p>History</p>
            </div>
            <div class="tab-pane fade" id="notes-md" role="tabpanel" aria-labelledby="notes-tab-md">
                <p>Notes</p>
            </div>
        </div>
    </form>
{% endblock %}
{% load static %}

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
    <title>Update a Reference</title>
    <script src="http://code.jquery.com/jquery-1.9.1.js">
    </script>
    <script src="http://code.jquery.com/ui/1.11.0/jquery-ui.js">
    </script>
    <script type="text/javascript" src="{% static 'bootstrap-tab.js' %}"> </script>

    <!-- MDB icon -->
    <link rel="icon" href="{% static 'img/mdb-favicon.ico' %}" type="image/x-icon">
    <!-- Font Awesome -->
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.11.2/css/all.css">
    <!-- Google Fonts Roboto -->
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap">
    <!-- Bootstrap core CSS -->
    <link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
    <!-- Material Design Bootstrap -->
    <link rel="stylesheet" href="{% static 'css/mdb.min.css' %}">
    <!-- Your custom styles (optional) - -->
    
  </head>
  <body>
    <div class="container">
      <div class="row justify-content-left">
        <div class="col-8">
          <h1 class="mt-2">{{ref.study_title}}</h1>
          <hr class="mt-0 mb-4">
          {% block content %}
          {% endblock %}
        </div>
      </div>
    </div>

    <!-- SCRIPTS -->
    <!-- jQuery -->
    <script type="text/javascript" src="{% static 'js/jquery.min.js' %}"></script>
    <!-- Bootstrap tooltips -->
    <script type="text/javascript" src="{% static 'js/popper.min.js' %}"></script>
    <!-- Bootstrap core JavaScript -->
    <script type="text/javascript" src="{% static 'js/bootstrap.min.js' %}"></script>
    <!-- MDB core JavaScript -->
    <script type="text/javascript" src="{% static 'js/mdb.min.js' %}"></script>
    <!-- MDBootstrap Datatables  -->
    <!-- <script type="text/javascript" src="{% static 'js/addons/datatables.min.js' %}"></script> -->
    <!-- Your custom scripts (optional) -->

  </body>
</html>
{%extends./base.html%}
{%load crispy_forms_tags%}
{%load widget_tweaks%}
{%block content%}
{%csrf_令牌%}
{%crispy form_helper.0%} 研究

位置

历史

注释

{%endblock%}
base.html

from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render
from django.urls import reverse_lazy

from crispy_forms.utils import render_crispy_form

from .models import reference
from .forms import ReferenceForm

def ref_detail(request, ref_id):

    try:
        ref = reference.objects.get(pk=ref_id)
    except ref.DoesNotExist:
        raise Http404("Reference does not exist")
    
    #If this is a POST request, process the form data
    if request.method == 'POST':
        #create a form instance and populate it with data from the request
        form = ReferenceForm(request.POST)
        #check whether it's valid
        if form.is_valid():
            #process the data in form.cleaned_data as required (i.e. save to database, etc.)
            #...
            print(form.cleaned_data)
            new_reference = form.save() #save a new reference object to the database, from the form's data
            #redirect to a new URL:
            return HttpResponseRedirect('thanks/')
    #if a GET (or any other method) we'll create a blank form
    else:
        form = ReferenceForm()
    
    return render(request, 'test_cedar_app/ref_detail.html', {'ref': ref, 'form': form, 'form_helper': form.helper})
from django.forms import ModelForm
from django import forms
from test_cedar_app.models import factor, reference
from django.utils.translation import gettext_lazy as _

from crispy_forms.bootstrap import Tab, TabHolder, FormActions
from crispy_forms.helper import FormHelper
from crispy_forms.layout_slice import LayoutSlice
from crispy_forms.layout import Submit, Layout, Div
from crispy_forms.utils import render_crispy_form

class ReferenceForm(ModelForm):
    class Meta:
        model = reference
        fields = '__all__'
        
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.form_tag = False
        self.helper.layout = Layout(
            Div('study_title', 
                'name_author',
                'publication_year',
                'publisher',
                'ident_doi',
                'ident_pmid',
                'exclude_extraction',
                'exclude_extraction_reason',
                css_id='main-tab-md',
                css_class='tab-pane fade show active',
            ), 
            Div('study_design',
                'study_design_detail',
                'study_sample_method',
                'ast_method',
                'has_breakpoint',
                'has_mic_table',
                css_id='study-tab-md',
                css_class='tab-pane fade',
            ),
        )
{% extends './base.html' %}

<!-- {% load static %} -->

{% load crispy_forms_tags %}

{% load widget_tweaks %}


{% block content %}
    <form action="" method="post" id="leadform" enctype="multipart/form-data" role="form">
        {% csrf_token %}
        <ul class="nav nav-tabs md-tabs" id="myTabMD" role="tablist">
            <li class="nav-item">
                <a class="nav-link active" id="main-tab-md" data-toggle="tab" href="#main-md" role="tab" aria-controls="main-md"
                    aria-selected="true">Main</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" id="study-tab-md" data-toggle="tab" href="#study-md" role="tab" aria-controls="study-md"
                    aria-selected="false">Study Design</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" id="location-tab-md" data-toggle="tab" href="#location-md" role="tab" aria-controls="location-md"
                    aria-selected="false">Location</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" id="history-tab-md" data-toggle="tab" href="#history-md" role="tab" aria-controls="history-md"
                    aria-selected="false">History</a>
            </li>
            <li class="nav-item">
                <a class="nav-link" id="notes-tab-md" data-toggle="tab" href="#notes-md" role="tab" aria-controls="notes-md"
                    aria-selected="false">Notes and Issues</a>
            </li>
        </ul>
        <div class="tab-content card pt-5" id="myTabContentMD">
            <div class="tab-pane fade show active" id="main-md" role="tabpanel" aria-labelledby="main-tab-md">
                {% crispy form form_helper.0 %}
            </div>
            <div class="tab-pane fade" id="study-md" role="tabpanel" aria-labelledby="study-tab-md">
                <p>Study</p>
            </div>
            <div class="tab-pane fade" id="location-md" role="tabpanel" aria-labelledby="location-tab-md">
                <p>Location</p>
            </div>
            <div class="tab-pane fade" id="history-md" role="tabpanel" aria-labelledby="history-tab-md">
                <p>History</p>
            </div>
            <div class="tab-pane fade" id="notes-md" role="tabpanel" aria-labelledby="notes-tab-md">
                <p>Notes</p>
            </div>
        </div>
    </form>
{% endblock %}
{% load static %}

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
    <title>Update a Reference</title>
    <script src="http://code.jquery.com/jquery-1.9.1.js">
    </script>
    <script src="http://code.jquery.com/ui/1.11.0/jquery-ui.js">
    </script>
    <script type="text/javascript" src="{% static 'bootstrap-tab.js' %}"> </script>

    <!-- MDB icon -->
    <link rel="icon" href="{% static 'img/mdb-favicon.ico' %}" type="image/x-icon">
    <!-- Font Awesome -->
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.11.2/css/all.css">
    <!-- Google Fonts Roboto -->
    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap">
    <!-- Bootstrap core CSS -->
    <link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
    <!-- Material Design Bootstrap -->
    <link rel="stylesheet" href="{% static 'css/mdb.min.css' %}">
    <!-- Your custom styles (optional) - -->
    
  </head>
  <body>
    <div class="container">
      <div class="row justify-content-left">
        <div class="col-8">
          <h1 class="mt-2">{{ref.study_title}}</h1>
          <hr class="mt-0 mb-4">
          {% block content %}
          {% endblock %}
        </div>
      </div>
    </div>

    <!-- SCRIPTS -->
    <!-- jQuery -->
    <script type="text/javascript" src="{% static 'js/jquery.min.js' %}"></script>
    <!-- Bootstrap tooltips -->
    <script type="text/javascript" src="{% static 'js/popper.min.js' %}"></script>
    <!-- Bootstrap core JavaScript -->
    <script type="text/javascript" src="{% static 'js/bootstrap.min.js' %}"></script>
    <!-- MDB core JavaScript -->
    <script type="text/javascript" src="{% static 'js/mdb.min.js' %}"></script>
    <!-- MDBootstrap Datatables  -->
    <!-- <script type="text/javascript" src="{% static 'js/addons/datatables.min.js' %}"></script> -->
    <!-- Your custom scripts (optional) -->

  </body>
</html>
{%load static%}
更新引用
{{ref.study_title}

{%block content%} {%endblock%}
您可以删除视图中的布局对象。最后几行看起来像:

    form = ReferenceForm()
    form.helper.layout.pop(1)

return render(request, 'test_cedar_app/ref_detail.html', {'ref': ref, 'form': form})

然后像往常一样显示表单:

{% crispy form %}