Python - Django -表单字段未显示在HTML页面上

6rqinv9w  于 2023-01-10  发布在  Go
关注(0)|答案(1)|浏览(128)

我正在学习Django,并尝试建立一个简单的表单HTML,表单字段可以通过POST方法发送。但是,如果我加载HTML页面,字段是不可见的
HTML页面为create.html

{% extends 'main/base.html' %}

{% block title %}
Create a task
{% endblock %}

{% block content %}
    <h1>Create a task</h1>
    <form method="post">
        {% csrf_token %}
        {{ form.title }}
        {{ form.task }}
      <button type="submit" class="btn btn-success">Add</button>
        <span>{{ error }}</span>
    </form>
{% endblock %}

      <input type="text" placeholder="Enter name" class="form-control"><br>
      <textarea placeholder="Enter description" class="form-control"></textarea><br>

我的forms.py文件如下所示:

from .models import Task
from django.forms import ModelForm, TextInput, Textarea

class TaskForm(ModelForm):
    class Meta:
        model = Task
        fields = ["title", "task"]
        widgets = {
            "title": TextInput(attrs={
                        'class': 'form-control',
                        'placeholder': 'Enter name'
                    }),
                    "task": Textarea(attrs={
                        'class': 'form-control',
                        'placeholder': 'Enter description'
                    }),
        }

views.py是这样的:

from django.shortcuts import render, redirect
from .models import Task
from .forms import TaskForm

def index(request):
    tasks = Task.objects.order_by('id')
    return render(request, 'main/index.html', {'title': 'Main page of this website', 'tasks': tasks})

def about(request):
    return render(request, "main/about.html")

def create(request):
    error = ''
    if request.method == 'POST':
        form = TaskForm(request.POST)
        if form.is_valid():
            form.save()
            redirect('home')
        else:
            error = 'The form has incorrect values'

    form = TaskForm()
    context = {
        'form': form,
        'error': error
    }
    return render(request, "main/create.html")

在我看来

{{ form.title }}

以及

{{ form.task }}

工作不正常。但是,我不知道如何调整代码使它们可见。我浏览了类似的问题,怀疑这是因为GET请求没有在视图中定义,但我不知道如何修复它。
谢谢你的建议。

u3r8eeie

u3r8eeie1#

@John Gordon在注解中提供了帮助,我没有将上下文传递到渲染调用中

return render(request, "main/create.html", context)

修复了我的问题

相关问题