python - 赋值错误之前引用的局部变量“表单”
问题描述
我是 django 2.x 的新手 .. 尝试创建博客项目作为对我的培训我在分配前引用的 /create_post/ 局部变量 'form' 处出现问题错误 UnboundLocalError
这个错误会让我生气
这是我的views.py 文件
# views.py
def add_post (request):
if request.method=='POST':
form = postform(request.POST)
if form.is_valid():
form.save()
else:
form=postform()
context = {
'form': form
}
return render(request, 'create_post.html', {})
这是我的models.py文件
# models.py
from django.db import models
from django.utils.timezone import now
# Create your models here.
class post (models.Model):
Post_Title = models.CharField (max_length=200)
Post_Image = models.ImageField(upload_to='post/statics/img/')
Post_Text = models.TextField()
Post_Date = models.DateTimeField(default=now, editable=False)
def __str__(self):
return self.Post_Title
这是我的 create_post.html 文件
# create_post.html
<form method="post">
{% csrf_token %}
{{ form }}
<button type="submit"}>save new post</button>
</form>
这是我的 forms.py 文件
# forms.py
from django import forms
from .models import *
class postform (forms.ModelForm):
class Meta:
model = post
fields = ['Post_Title', 'Post_Image', 'Post_Text']
这是我得到的错误
UnboundLocalError at /create_post/
local variable 'form' referenced before assignment
Request Method: GET
Request URL: http://127.0.0.1:8000/create_post/
Django Version: 2.2.1
Exception Type: UnboundLocalError
Exception Value:
local variable 'form' referenced before assignment
Exception Location: D:\PEPSI\PycharmProjects\bloggersystem\post\views.py in add_post, line 29
Python Executable: C:\Users\Mohamed Abaas\AppData\Local\Programs\Python\Python37-32\python.exe
Python Version: 3.7.3
Python Path:
['D:\\PEPSI\\PycharmProjects\\bloggersystem',
'C:\\Users\\Mohamed '
'Abaas\\AppData\\Local\\Programs\\Python\\Python37-32\\python37.zip',
'C:\\Users\\Mohamed '
'Abaas\\AppData\\Local\\Programs\\Python\\Python37-32\\DLLs',
'C:\\Users\\Mohamed Abaas\\AppData\\Local\\Programs\\Python\\Python37-32\\lib',
'C:\\Users\\Mohamed Abaas\\AppData\\Local\\Programs\\Python\\Python37-32',
'C:\\Users\\Mohamed '
'Abaas\\AppData\\Local\\Programs\\Python\\Python37-32\\lib\\site-packages']
Server time: Fri, 31 May 2019 18:28:50 +0000
我想了解的不仅是修复代码
任何身体都可以帮忙吗???!!!
解决方案
在 GET 请求的情况下,您没有定义form
变量。这是因为您缩进了else
太多:
def add_post (request):
if request.method=='POST':
form = postform(request.POST)
if form.is_valid():
form.save()
else:
form=postform()
context = {
'form': form
}
return render(request, 'create_post.html', {})
推荐阅读
- python - OSError: [WinError 17] 系统无法将文件移动到其他磁盘驱动器
- counter - Prometheus 来源的时间序列:如何将空值设置为零?
- nginx - 在 Kubernetes 中使用 ingress-nginx 时,是否可以使用从路径中捕获的组来配置后端?
- discord - 如何在 Discord.js 中获取用户询问命令的角色
- reactjs - 已在 Hook in loop 中刷新状态
- batch-file - 批处理脚本 - 如何将标志传递到循环中并在满足条件时修改标志
- android - 在 onBindViewHolder 中为 RecyclerView 设置 Firebase 实时数据库参考中的图像
- string - 有没有办法直接将 golang 字符串复制到预先分配的 C 字符缓冲区
- java - Jersey Client 下载 ZIP 文件并高效解压
- node.js - AWS Lambda 错误:“名称”处的验证异常值 [] 未能满足约束:成员的长度必须大于或等于 1