【问题标题】:TypeError at /edit : edit() missing 1 required positional argument: 'entry'/edit 处的类型错误:edit() 缺少 1 个必需的位置参数:'entry'
【发布时间】:2020-12-13 16:20:47
【问题描述】:

我是 Django 的新手,我正在开发一个 Web 应用程序项目。这个特定页面应该编辑条目并保存条目。但我不断收到缺少的 1 个必需参数

Views.py

# editPage forms
class editform(forms.Form):
    content = forms.CharField(widget=forms.Textarea(), label='')


def edit(request, entry):
    if request.method == 'GET':
        page = util.get_entry(entry)
        return render(request,"encyclopedia/edit.html",{
            "form":SearchEntry(),
            "edit":editform(initial={'content': page}),
            "entry":entry
            })

    #If this is a POST request
    else:
        form = editform(request.POST)
        if form.is_valid():
            content = form.cleaned_data["content"]
            util.save_entry(entry,content)
            page = util.get_entry(entry)
            page = mark.convert(page)
            return render(request,"encyclopedia/entry.html",{
                "form":SearchEntry(),
                "page":page,
                "entry": title
            })

urls.py

从 django.urls 导入路径

从 .导入视图

urlpatterns = [
    path("", views.index, name="index"),
    path("wiki/<str:entry>", views.entry, name="entry"),
    path("search", views.search, name="search"),
    path("newEntry", views.newEntry, name="newEntry"),
    path("edit", views.edit, name="edit"),

编辑 HTML

{% extends "encyclopedia/layout.html" %}


{% block title %}
    Edit {{name}}
{% endblock %}


{% block body %}
  <h1>{{title}}</h1>
  <form action= "{% url 'edit' %}" method="POST">
    {% csrf_token %}
    {{ edit }}
  <br>
  <input class="save btn btn-info" type="submit" value="save"/>
  </form>
  <p> Click the "save" button to save your entry to the encyclopedia.</p>
  <br>



<a href = "{% url 'index' %}"> Return Home</a>
{% endblock %}

入口 HTML

{% extends "encyclopedia/layout.html" %}




{% block title %}
    Encyclopedia
{% endblock %}

{% block body %}

    <h1>{{title}}</h1>


    {{entry | safe}}

<a href = "{% url 'edit' %}"> Edit Content</a>
<br>
<br>
<a href = "{% url 'index' %}"> Return Home</a>
{% endblock %}

当我更改此特定网址时:

path("edit/<str:entry>", views.edit, name="edit"),

我遇到了一个不同的问题: 未找到任何参数的“编辑”反向。尝试了 1 种模式:['edit/(?P[^/]+)$']

【问题讨论】:

标签: python html django


【解决方案1】:

问题出在您的urls.py 文件中的这一行:

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

因为views.edit 要求您必须在url 中提供两个参数requestentry。在您的情况下, entry 丢失了。尝试在您的 urlspatterns 路径中添加条目,在这种情况下,我希望您的条目是 int

path("edit/<int:entry>", views.edit, name="edit"),

并且此条目可以是您的模型 pk 或您想要的任何其他内容。每当您在 html 中调用编辑视图时修改您的 urlspatterns 后,您需要执行以下操作:

{% url 'edit' entry=your_entry_value %}

代替:

{% url 'edit' %} 

【讨论】:

  • 如需更清晰的答案,请分享您的utils.get_entry() 功能。
  • 玉 util.get_entry() 接受字符串:def get_entry(title): """ Retrieves an encyclopedia entry by its title. If no such entry exists, the function returns None. """ try: f = default_storage.open(f"entries/{title}.md") return f.read().decode( "utf-8") 除了 FileNotFoundError: return None`
  • util.get_entry() 接受字符串:def get_entry(title): """ Retrieves an encyclopedia entry by its title. If no such entry exists, the function returns None. """ try: f = default_storage.open(f"entries/{title}.md") return f.read().decode("utf-8") except FileNotFoundError: return None
猜你喜欢
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
  • 2022-01-11
  • 2018-09-12
  • 2021-08-05
  • 2021-07-06
  • 2021-08-05
相关资源
最近更新 更多