django - 我应该在哪里放置我的上下文以使 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)
解决方案
在 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)
推荐阅读
- spring - 如何在 Spring Boot 中使用 Thymeleaf 生成 XML?
- authentication - 如何从服务器端 Blazor 应用程序中的 Blazor 组件调用 razor 页面而不导致页面刷新
- magento - 当我用 curl -I http://localhost 测试清漆时,我得到:
- angular-material-8 - 在某些机器上,材质对话框在 Chrome 下不起作用
- c# - How to use TestKit to not process messages sent to Self
- r - 制作数据的 spaggetiplot
- c# - 如何使用 keydownevent 更改密钥
- db2 - 使用函数拆分 db2 表中的数据
- encryption - 从 multipart/form-data 恢复信息
- c# - Pomelo.EntityFrameworkCore.MySQL DBContext 抛出“Unqualified data type char”异常