【问题标题】:Where should I place my context for the forms_as.p to work properly我应该在哪里放置我的上下文以使 forms_as.p 正常工作
【发布时间】:2021-01-31 14:27:07
【问题描述】:

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

之所以把它放在else下面是因为如果有错误我想显示错误

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)

【问题讨论】:

    标签: django django-models django-views django-forms django-templates


    【解决方案1】:

    在你的 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)
    

    【讨论】:

    • 您好,您指的是第一个还是第二个 if 语句?
    • 第一个,对不起!我已经更新了我的答案来说明这一点并展示了一个更简洁的解决方案。
    • 我不能按照你的方式去做,因为 else 语句的目的是为了让我显示错误
    • 如果我将上下文从 else 语句中移出,则不会显示错误
    • 如果您需要显示错误@Ffion 的模板代码,请告诉我,但我怀疑您是否需要它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    • 2012-07-10
    • 2013-11-15
    相关资源
    最近更新 更多