簡體   English   中英

如何解決 django 中的“TypeError at /post/new/”

[英]How can I solve "TypeError at /post/new/" in django

在嘗試在 Django 版本 2.2 中創建新表單時。 我遇到了這個錯誤

/post/new/join() 參數中的類型錯誤必須是 str 或字節,而不是“元組”。

我真的嘗試過解決這個問題,但我無法解決它。

這些是已采取的步驟..

  1. 我在應用程序級別(博客文件夾)為 post_new 添加了一個新的 URLConf

     # blog/urls.py from django.urls import path from . import views urlpatterns = [ path('post/new/', views.BlogCreateView.as_view(), name='post_new'), ]
  2. 然后,通過導入名為 CreateView 的通用類創建視圖,然后將其子類化以創建名為 BlogCreateView 的新視圖。

     # blog/views.py from django.views.generic import ListView, DetailView from django.views.generic.edit import CreateView from . models import Post class BlogCreateView(CreateView): model = Post template_name = 'post_new.html' fields = '__all__'

最后一步是創建模板,我們將其命名為 post_new.html。

<!-- templates/post_new.html -->
{% extends 'base.html' %}
{% block content %}
    <h1>New post</h1>
    <form action="" method="post">{% csrf_token %}
        {{ form.as_p }}
        <input type="submit" value="Save" />
    </form>
{% endblock %}

編輯以添加完整的回溯

環境:

請求方式:GET 請求地址: http : //127.0.0.1 : 8000 /post/ new/

Django 版本:2.2 Python 版本:3.7.3 已安裝的應用程序:['django.contrib.admin'、'django.contrib.auth'、'django.contrib.contenttypes'、'django.contrib.sessions'、'django.contrib .messages', 'django.contrib.staticfiles', 'blog'] 安裝的中間件:['django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware ', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware']

追溯:

文件“C:\\Users\\user pc\\AppData\\Local\\Programs\\Python\\Python37-32\\lib\\ntpath.py” in join 89. for p in map(os.fspath, paths):

在處理上述異常(預期的 str、bytes 或 os.PathLike 對象,而不是元組)時,又發生了一個異常:

文件“C:\\Users\\user pc\\AppData\\Local\\Programs\\Python\\Python37-32\\lib\\site-packages\\django\\core\\handlers\\exception.py”在內部 34. response = get_response(request)

_get_response 145. response = self.process_exception_by_middleware(e,要求)

文件“C:\\Users\\user pc\\AppData\\Local\\Programs\\Python\\Python37-32\\lib\\site-packages\\django\\core\\handlers\\base.py” in _get_response 143. response = response.render()

渲染 106 中的文件“C:\\Users\\user pc\\AppData\\Local\\Programs\\Python\\Python37-32\\lib\\site-packages\\django\\template\\response.py”。 self.content = self.rendered_content

文件“C:\\Users\\user pc\\AppData\\Local\\Programs\\Python\\Python37-32\\lib\\site-packages\\django\\template\\response.py”在render_content 81.template = self.resolve_template(self.template_name)

文件 "C:\\Users\\user pc\\AppData\\Local\\Programs\\Python\\Python37-32\\lib\\site-packages\\django\\template\\response.py" in resolve_template 63. return select_template(template, using=self.using )

文件“C:\\Users\\user pc\\AppData\\Local\\Programs\\Python\\Python37-32\\lib\\site-packages\\django\\template\\loader.py” in select_template 42. return engine.get_template(template_name)

文件“C:\\Users\\user pc\\AppData\\Local\\Programs\\Python\\Python37-32\\lib\\site-packages\\django\\template\\backends\\django.py” in get_template 34. return Template(self.engine.get_template (模板名稱),自我)

文件"C:\\Users\\user pc\\AppData\\Local\\Programs\\Python\\Python37-32\\lib\\site-packages\\django\\template\\engine.py" in get_template 143.template, origin = self.find_template(template_name)

find_template 125 中的文件“C:\\Users\\user pc\\AppData\\Local\\Programs\\Python\\Python37-32\\lib\\site-packages\\django\\template\\engine.py”。跳過)

文件“C:\\Users\\user pc\\AppData\\Local\\Programs\\Python\\Python37-32\\lib\\site-packages\\django\\template\\loaders\\base.py” in get_template 18. for origin in self.get_template_sources(template_name) ):

get_template_sources 中的文件“C:\\Users\\user pc\\AppData\\Local\\Programs\\Python\\Python37-32\\lib\\site-packages\\django\\template\\loaders\\filesystem.py” 36.name = safe_join(template_dir, template_name)

文件 "C:\\Users\\user pc\\AppData\\Local\\Programs\\Python\\Python37-32\\lib\\site-packages\\django\\utils_os.py" in safe_join 32. final_path = abspath(join(base, *paths))

文件 "C:\\Users\\user pc\\AppData\\Local\\Programs\\Python\\Python37-32\\lib\\ntpath.py" in join 115. genericpath._check_arg_types('join', path, *paths)

文件“C:\\Users\\user pc\\AppData\\Local\\Programs\\Python\\Python37-32\\lib\\genericpath.py” in _check_arg_types 149. (funcname, s. class . name )) from None

異常類型:TypeError at /post/new/ 異常值:join() 參數必須是 str 或字節,而不是“元組”

我正在使用 python3.7 和 django2.2

根據錯誤,您寫了如下內容:

# blog/views.py
from django.views.generic import ListView, DetailView
from django.views.generic.edit import CreateView
from . models import Post

class BlogCreateView(CreateView):
    model = Post
    template_name = 'post_new.html',  # a trailing comma
    fields = '__all__'

因此template_name不是字符串,而是包含字符串的單例元組。 您應該刪除尾部逗號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM