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'

StandardScaler:TypeError:fit()缺少1个必需的位置参数:'X'

实现逻辑回归“TypeError:fit() 缺少 1 个必需的位置参数:'y'”