【问题标题】:Why doesn't include show the fields of a form when reusing a template?为什么在重用模板时不包括显示表单的字段?
【发布时间】:2019-01-20 14:43:59
【问题描述】:

早上好,我是 Django 新手,我正在尝试包含一个模板表单,但它不显示字段,只显示保存按钮。 使用 Django 2.1。我总结了代码,所以请你帮帮我。因为您需要在其他模板中重复使用该表单。

models.py

from django.db import models
class Area(models.Model):
    nombre = models.CharField(max_length=45)
    descripcion = models.CharField(max_length=100, null=True, blank=True)

    def __str__(self):
        return self.nombre

views.py

class AreaCreate(CreateView):
    model = Area
    form_class = AreaForm
    template_name = 'area/area_form.html'

class AreaList(ListView):
    model = Area
    template_name = 'area/area_list.html'

forms.py

class AreaForm(forms.ModelForm):
    class Meta:
        model = Area

        fields = (
                'nombre',
                'descripcion',
        )
        widgets = {
                'nombre': forms.TextInput(attrs={'class': 'form-control', 'placeholder':'Area'}),
                'descripcion': forms.TextInput(attrs={'class': 'form-control', 'placeholder':'Descripción'}),
        }

area_form.html

<form action="" method="POST"> {% csrf_token %}
   <div class="form-row">
     <div class="col-sm-4 campoform">
     {{ form.nombre }}
     </div>
     <div class="col-sm-6 campoform">
     {{ form.descripcion }}
     </div>
     <div class="col-sm-2 campoform">
     <button class="btn btn-primary" type="submit" style="width:100%">Guardar</button>
     </div>
  </div>
</form>

area_list.html --- 为了更好地理解,我没有添加完整的 list.html 代码。

<div>{% include "area/area_form.html" %}</div>

area_list.html 中的结果是它只显示了按钮。

【问题讨论】:

  • 为什么要这样?您已包含模板,但尚未将表单添加到上下文中。该表单仅由 AreaCreate 视图发送。
  • @Rildoy 这是一个基于类的视图,因此如果定义了 form_class,则该表单在模板中可用。我用我的一个 CreateViews 检查了所有内容,并显示了这些字段。那些自定义的 CSS 类呢?
  • 感谢您的评论。在模板的 URL -area_form.html- 如果显示表单,问题是将其包含在另一个模板中,正如我所读到的,在使用 createview 时,不再需要使用上下文或 if ?.
  • @Rildoy ListView 不会显示您的表单,除非您将其添加到上下文中。例如,请参阅类似 stackoverflow.com/questions/18664182/… 的内容
  • 非常感谢@Uroš Trstenjak。你的例子非常好。也感谢 DanielRoseman。

标签: django python-3.x django-forms django-templates django-views


【解决方案1】:

抱歉延迟回复。我通过使用模态调用表单来解决它。使用库“bootstrap_modal_forms”。

 #View
class GestionarAreas(generic.ListView):
        model = Area
        context_object_name = 'areas'
        template_name = 'areas/gestionar_areas.html'
        paginate_by = 10  

class CrearArea(generic.CreateView):
        template_name = 'areas/crear_area.html'
        form_class = AreaForm
        success_url = reverse_lazy('gestionar_areas')

#urls
path('', login_required(views.GestionarAreas.as_view()),name='gestionar_areas'),
path('crear/', login_required(views.CrearArea.as_view()), name='crear_area'),

#HTML
<div class="col-sm-auto">
    <button class="crear-area btn btn-primary" type="button"name="button">
    <span class="fa fa-plus mr-2"></span>Crear Area</button>
</div>

#Script
// Boton Crear Area
 $(".crear-area").modalForm({formURL: "{% url 'crear_area' %}", successURL: ""});

// Boton Actualizar Area
 $(".editar-area").each(function () {
        $(this).modalForm({formURL: $(this).data('id'), successURL: ""});
      });

【讨论】:

    猜你喜欢
    • 2013-11-25
    • 1970-01-01
    • 2018-03-21
    • 2011-10-11
    • 1970-01-01
    • 2017-12-15
    • 2013-02-01
    • 2015-08-19
    • 1970-01-01
    相关资源
    最近更新 更多