TypeError:entry() 缺少 1 个必需的位置参数:'title'(Django 帮助)
Posted
技术标签:
【中文标题】TypeError:entry() 缺少 1 个必需的位置参数:\'title\'(Django 帮助)【英文标题】:TypeError: entry() missing 1 required positional argument: 'title' (Django Help)TypeError:entry() 缺少 1 个必需的位置参数:'title'(Django 帮助) 【发布时间】:2021-03-19 08:32:16 【问题描述】:我正在使用 Django 创建一个类似于 Wikipedia 的百科全书网站,用于课程。我已经玩了很长时间,但仍然无法解决这个问题 - 我不断收到错误:entry() missing 1 required positional argument: 'title'
当我单击在网站上创建新页面时发生错误。这与函数“newpage”有关,但我认为问题可能出在函数“entry”中。
我从这个 Stack Overflow 建议中执行了确切的步骤(但使用了“标题”),但它不起作用: TypeError at /edit : edit() missing 1 required positional argument: 'entry'
在 urls.py 中我都试过了:
path("wiki/<str:entry>", views.entry, name="entry"),
path("wiki/<str:title>", views.entry, name="entry"),
只是无法弄清楚如何克服错误。感谢任何信息,因为我是 Django 新手。
urls.py 文件:
urlpatterns = [
path('admin/', admin.site.urls),
path("", views.index, name="index"),
path("wiki/<str:title>", views.entry, name="entry"),
path("newpage", views.entry, name="newpage"),
]
views.py 文件:
class CreateForm(forms.Form):
title = forms.CharField(label='title')
text = forms.CharField(label='text')
def index(request):
"""Homepage for website"""
return render(request, "encyclopedia/index.html",
"entries": util.list_entries()
)
def entry(request, title):
""" Displays the requested entry page, if it exists """
entry_md = util.get_entry(title)
if entry_md != None:
# Title exists, convert md to HTML and return rendered template
entry_HTML = Markdown().convert(entry_md)
return render(request, "encyclopedia/entry.html",
"title": title,
"entry": entry_HTML,
)
else:
# Page does not exist
return render(request, "encyclopedia/error.html",
"title": title,
)
def newpage(request):
if request.method == "GET":
return render(request, "encyclopedia/newpage.html",
"create_form": CreateForm(),
"title": title,
)
elif request.method == "POST":
form = CreateForm(request.POST)
if form.is_valid():
title = form.cleaned_data['title']
text = form.cleaned_data['text']
entries = util.list_entries()
if title in entries:
return render(request, "encyclopedia/newpageerror.html", "message": "Page
already exists")
else:
util.save_entry(title, text)
title = util.get_entry(title)
messages.success(request, f'New page "title" created successfully!')
return render(request, "encyclopedia/newpage.html")
【问题讨论】:
你要去的网址是什么?它看起来像“localhost:8000/entry/sometitle”吗? 只要我点击服务器链接它的127.0.0.1:8000。然后当我点击“创建新页面”时,网址是127.0.0.1:8000/newpage。也许这是问题的一部分?对于分配,url 必须是 /wiki/TITLE,其中 TITLE 是“创建新页面”页面的标题。我试图在 urls.py 中这样写,但现在我不太确定如何修复。 请出示您的模板 【参考方案1】:问题是您说条目需要 2 个参数,但只提供请求。您可以将输入功能更改为:
def entry(request, title=None):
# Rest of your code
这里我将 title=None 设置为默认参数,这将解决您现在遇到的问题,但可能会导致其他问题。我不确定为什么有 2 个网址可以进入。
【讨论】:
以上是关于TypeError:entry() 缺少 1 个必需的位置参数:'title'(Django 帮助)的主要内容,如果未能解决你的问题,请参考以下文章
TypeError:AuthMiddlewareStack() 缺少 1 个必需的位置参数:'inner'
TypeError:scatter()缺少1个必需的位置参数:'y'
TypeError: fit() 缺少 1 个必需的位置参数:'y',
Pandas:TypeError:sort_values() 缺少 1 个必需的位置参数:'by'