【问题标题】:Django form fields not loading in templateDjango 表单字段未在模板中加载
【发布时间】:2018-01-28 18:46:04
【问题描述】:

我似乎无法在我的模板中加载模型表单。

models.py

from django.db import models

class Event(models.Model):
    name = models.CharField(max_length=60)
    start_datetime = models.DateTimeField()
    end_datetime = models.DateTimeField()
    description = models.TextField()

forms.py

from django import forms
from .models import Event

class EventForm(forms.ModelForm):
    class Meta:
        model = Event
        fields = ['name']

views.py

from django.shortcuts import render
from .forms import EventForm

def index(request):
    if request.method == 'POST':
        form = EventForm(request.POST)
        if form.is_valid():
            form.save()
    else:
        form = EventForm()

    return render(request, 'index.html')

index.html

<form method="POST" action="">
  {% csrf_token %}
  {{ form.as_p }}
</form>
<button type="submit">Save</button>

在 GET 请求的 views.py 中添加 print(form) 时,我可以让表单在加载时打印到控制台,但它不会加载到模板中。

【问题讨论】:

  • 渲染方法您正在发送未定义的事件。也没有使用 form =EventForm。
  • 为了强化 Vikash 的观点,您需要将 form 传递给模板的上下文(在 render 中),以便在模板中可用。如果您使用基于类的视图,这将通过指定表单类自动完成。
  • 嗯,有道理。所以我的渲染函数应该是 render(request, 'index.html', {'form': form})?
  • 你没有定义events 为什么你的代码可以正常工作?
  • @LukePhillip 试试看。

标签: python django forms


【解决方案1】:

不同方式使用表单的好例子:https://docs.djangoproject.com/en/1.11/topics/forms/#the-view

对于 index.html 渲染它需要 form 变量。所以Render方法调用应该是这样的:

render(request, 'index.html', {'form': form})

【讨论】:

  • 我将渲染更改为上述内容,但模板上仍然没有显示表单。不过,您的回答很有道理,我认为这最终会成为主要问题。
  • 这正是我避免发布答案的原因。我担心可能会有多个问题。
  • 没关系,我意识到我最近在 index.html 中插入了一个错字。当我修复它时,模板上显示了表单!
  • 太棒了。我只是建议你试试这个:docs.djangoproject.com/en/1.11/topics/forms/#more-on-fields
猜你喜欢
  • 1970-01-01
  • 2017-12-15
  • 2019-02-23
  • 1970-01-01
  • 2013-07-17
  • 1970-01-01
  • 1970-01-01
  • 2023-01-10
  • 2015-11-11
相关资源
最近更新 更多