首页 > 解决方案 > 我应该在哪里放置我的上下文以使 forms_as.p 正常工作

问题描述

基本上,我正在尝试 form.as_p 列出值,但它不起作用。它并不是真的不起作用,但它只有在我按下提交后才起作用(它只出现在我的模板中)。我相信我将上下文放置在错误的位置或错误的缩进中,但我不确定我应该转移context['form'] = form到哪里。我试图改变它,但它说在赋值之前引用了 lcoal 变量。有人可以建议吗?

我把它放在其他下面的原因是因为如果有错误我想显示错误

def create_blog_view(request):
    context = {}
    user = request.user
    if request.method == 'POST':
        form = CreateBlogPostForm(request.POST or None, request.FILES or None)
        if form.is_valid():
            obj= form.save(commit = False)
            author = Account.objects.filter(email=user.email).first()
            obj.author = author
            obj.save()
            return redirect('HomeFeed:main')
        else:
            context['form'] = form
    return render(request, "HomeFeed/create_blog.html", context)
def create_blog_view(request):
    context = {}
    user = request.user
    form = CreateBlogPostForm()
    if request.method == 'POST':
        form = CreateBlogPostForm(request.POST or None, request.FILES or None)
        if form.is_valid():
            obj= form.save(commit = False)
            author = Account.objects.filter(email=user.email).first()
            obj.author = author
            obj.save()
            return redirect('HomeFeed:main')
        else:
            context['form'] = form
    context['form'] = form

    return render(request, "HomeFeed/create_blog.html", context)

标签: djangodjango-modelsdjango-viewsdjango-formsdjango-templates

解决方案


在 if 语句之前,您需要添加:

form = CreateBlogPostForm()
context['form'] = form

这将初始化一个空白表单并将其添加到您的上下文中。

目前,如果表单已提交(/ POST 请求已发送到视图)并且表单存在验证错误,则您仅将“表单”添加到您的上下文中。

为了避免重复代码,最好是这样的:

def create_blog_view(request):
    user = request.user
    form = CreateBlogPostForm()
    if request.method == 'POST':
        form = CreateBlogPostForm(request.POST, request.FILES)
        if form.is_valid():
            obj= form.save(commit = False)
            author = Account.objects.filter(email=user.email).first()
            obj.author = author
            obj.save()
            return redirect('HomeFeed:main')
    context['form'] = form
    return render(request, "HomeFeed/create_blog.html", context)

推荐阅读