【问题标题】:TypeError in Django ApplicationDjango 应用程序中的类型错误
【发布时间】:2020-12-10 08:14:12
【问题描述】:

我正在制作一个 Django 应用程序。这是一个维基百科页面,如果您单击 ,将允许您创建一个新页面。

urlpatterns 中的路径是:

path("create", views.create, name="create")

views.py中的函数是:

def create(request):
if request.method == 'POST':
    form = Post(request.POST)
    if form.is_valid():
        title = form.cleaned_data["title"]
        textarea = form.cleaned_data["textarea"]
        entries = util.list_entries()
        if title in entries:
            return render(request, "encyclopedia/error.html", {"form": Search(), "message": "Page already exist"})
        else:
            util.save_entry(title,textarea)
            page = util.get_entry(title)
            page_converted = markdowner.convert(page)

            context = {
                'form': Search(),
                'page': page_converted,
                'title': title
            }

            return render(request, "encyclopedia/entry.html", context)
else:
    return render(request, "encyclopedia/create.html", {"form": Search(), "post": Post()})

我得到的错误信息是:

TypeError: 解码为 str: 需要一个类似字节的对象,发现 NoneType

完整追溯:

Traceback(最近一次调用最后一次): 文件“/Users/franciscogutierrez/Desktop/Software1/CS50W/project1/wiki/env/lib/python3.8/site-packages/django/core/handlers/exception.py”,第 47 行,在内部 响应 = get_response(请求) 文件“/Users/franciscogutierrez/Desktop/Software1/CS50W/project1/wiki/env/lib/python3.8/site-packages/django/core/handlers/base.py”,第 179 行,在 _get_response 响应 = Wrapped_callback(request, *callback_args, **callback_kwargs) 网页中的文件“/Users/franciscogutierrez/Desktop/Software1/CS50W/project1/wiki/encyclopedia/views.py”,第 60 行 “标题”:markdowner.convert(页面) 文件“/Users/franciscogutierrez/Desktop/Software1/CS50W/project1/wiki/env/lib/python3.8/site-packages/markdown2.py”,第 316 行,转换 文本 = unicode(文本,'utf-8') TypeError: 解码为 str: 需要一个类似字节的对象,找到了 NoneType

【问题讨论】:

  • 当请求方法为 POST 且表单无效时,您不会返回响应。视图不应返回 None
  • 我似乎无法将其转到 create.html。每次单击“创建新页面”链接时,都会收到类型错误消息。在 create.html 我有一个表单,然后它允许用户发布。
  • 将完整的追溯添加到您的问题中,它将缩小实际问题的范围
  • 我已经更新了问题,谢谢

标签: python html django typeerror


【解决方案1】:

正如跟踪所示,您在 markdowner 函数中传递 None ,而它希望您发送一个字节对象。您正在从 utils.get_entry 函数中获取页面。确保不返回 None。如果这不可能,请在调用 markdower 函数之前检查 None 值。试试这样 -

page = util.get_entry(title)
if page:
    page_converted = markdowner.convert(page)

【讨论】:

  • 我试过了,它仍然用“ if page:”显示类型错误
【解决方案2】:

有一个 str:title 路径在“create”路径之前运行,因此 create 将进入上面的路径而不是其他路径。通过将 create 放在 str:title 之上来修复它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-03
    相关资源
    最近更新 更多