问题描述
直截了当:当使用 full_content.create 创建文件时,出现错误'dict'对象没有属性'capitalize'。
我使用django.forms,在我的 Class InputForm 内部使用方法 cleaner_data 。我的猜测是,当我在清洗后访问标题本身时,它是无。
Util.py:
def create_file(title,content):
if default_storage.exists(f"entries/{title}.md"):
return False
else:
f = open(f"entries/{title.capitalize()}.md",mode='w+')
f.write(content)
f.close()
return True
forms.py:
class InputForm(forms.Form):
title = forms.CharField(label="Enter a title")
content = forms.CharField(label="Enter content",widget=forms.Textarea())
def clean_title(self):
title_name = self.cleaned_data.get("title")
filename = f"entries/{title_name}.md"
if not default_storage.exists(filename):
return self.cleaned_data
else:
forms.ValidationError("This title is already taken")
def create(self):
title = self.cleaned_data["title"]
content = self.cleaned_data["content"]
util.create_file(title,content)
views.py:
def create(request):
if request.method == "POST":
full_content = forms.InputForm(request.POST)
if full_content.is_valid():
full_content.create()
#return render(request,"encyclopedia/entry.html",{
# "title": "util.get_page_name(title)",# "entry": "util.get_entry(title)"
# })
return HttpResponse("Test page. What i want is below to output is above")
return render(request,"encyclopedia/create.html",{
"title":forms.InputForm()["title"],"content":forms.InputForm()["content"]
})
解决方法
clean_title
方法应返回标题。目前,您正在返回cleaned_data
字典。更改为:
def clean_title(self):
title_name = self.cleaned_data.get("title")
filename = f"entries/{title_name}.md"
if not default_storage.exists(filename):
return title_name
...