Django 表单与模板

Django Forms vs Templates

抱歉给您带来不便,但我是 Django 的新手。我想象如果我使用 forms.py,Django 会为我创建表单,我不需要在模板上创建输入标签,所以我只创建了一个测试模板,因为我创建了 forms.py。但是,运行 我的代码告诉我我的视图没有 return HttpResponse 对象,我怀疑这是因为我的模板只有文本。你能帮我创建一个模板来让我的表格正常工作吗?我们可以使用上面发布的示例。我会把它贴在下面:

def create_post(request):
    if request.method == 'POST':
        form = CreatePostForm(request.POST)
        if form.is_valid():
            my_model = form.save()
            return redirect('/posts/')
        else:
            form = CreatePostForm()
        c = {'form' : form}
        return render(request,'create_post.html',c)

你应该 return render() 而不是 HttpResponse:

from django.shortcuts import render

def create_a_my_model(request):
    ...
    return render(request, 'template.html', c)

template.html可以很原始:

<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button>Save</button>
</form>

另请注意,好的做法是在 post 请求后重定向到某个页面。这将防止双重提交。所以你的视图的整个代码将是:

from django.shortcuts import redirect, render

def create_a_my_model(request):
    if request.method == 'POST':
        form = MyModelForm(request.POST)
        if form.is_valid():
            my_model = form.save()
            return redirect(my_model) # if the model has `get_absolute_url()`
    else:        
        form = MyModelForm()
    return render(request, 'template.html', {'form': form})

如果您的模型没有 get_absolute_url() 方法,您可以重定向到任何其他 url:return redirect('/success/page/')