'dict'对象没有属性'capitalize'

问题描述

直截了当:当使用 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
    ...