【问题标题】:How to make edit function work in views.py Django如何使编辑功能在views.py Django中工作
【发布时间】:2021-12-26 21:27:37
【问题描述】:

我正在为我的条目创建一个编辑选项。但不是重定向到入口页面,而是将我带到 addpage 以创建一个新表单。如何重定向到编辑页面?

另外,我如何确保用户之前的输入会在他们点击编辑按钮时得到反映。我使用了首字母缩写 - 这是最好的方法吗,因为我不使用模型,而是使用 forms.Form。

VIEWS.PY

class AddPageForm(forms.Form):
    title = forms.CharField(max_length=20)
    content = forms.CharField(widget=forms.Textarea(
        attrs={
            "class": "form-control",
            "placeholder": "Tell us more!"
        })
    
def edit_page(request, title):
    entry = util.get_entry(title)
    if request.method == "POST":
        form = AddPageForm(request.POST, initial={
                "title": title,
                "content": content
                })
        
        if form.is_valid():
            util.save_entry(title, content)
            return redirect('encyclopedia:entrypage', title=title)

    else:
        form = AddPageForm()
        return render(request, "encyclopedia/editpage.html", {"form":form})

编辑页面

{% block body %}

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

    <form action="" method="post">
        {% csrf_token %}
        {% form %}
        <input type="submit" value="Submit" class="btn btn-secondary">
    </form>

进入页面

{% block body %}
        {{ content|safe }}

        <a href="{% url 'encyclopedia:editpage' title=title %}" class="btn btn-primary">Update</a>
        <!-- <input="text" name="title" value="{{game.title}}" />
        <input="text" name="genre" value="{{game.genre}}" /> -->

{% endblock %}

URLS.PY

app_name = "encyclopedia"

urlpatterns = [
    path("", views.index, name="index"),
    path("wiki/<str:title>", views.entry_page, name="entrypage"),
    path("search", views.search, name="search"),
    path("add_page", views.add_page, name="addpage"),
    path("edit_page/<str:title>", views.edit_page, name="editpage")

]

【问题讨论】:

  • 您在views.py 中是否有用于您的入口页面的视图?

标签: django django-models django-views django-forms django-templates


【解决方案1】:

我认为您的代码的问题在于它在不存在的 url 上调用重定向。 'encyclopedia:entrypage' 在您的 urls.py 中不存在。有两种方法可以解决这个问题。选项#1 在urls.py 中为入口页面创建一个url,名称=入口页,并在url 中设置一个参数来表示哪个入口页。或者选项#2 直接返回到edit_page 函数中的入口页面视图。这是您将如何做到这一点的粗略草图

在views.py的edit_page中:

# ...Code above

if form.is_valid():
    util.save_entry(title, content)
    return entry_page_view(request, title) 
    # 'title' if this view has a title passed as a kwarg or arg

# Code below...

【讨论】:

  • 我有一个入口网址,我只是没有包含上面的代码,但我会更新以显示我所有的网址。在这种情况下,这不是问题,请问还有什么可能导致这个问题?
  • 第二个选项不起作用吗?我认为调用视图函数比使用 url 更好。实际上,我认为问题在于您尝试重定向到名称空间 url,这似乎不起作用。试试上面的代码和return redirect(entry_page, title=title)。此外,这样的事情会起作用:return redirect(f"wiki/{title}") ...只要确保网址完全正确
猜你喜欢
  • 1970-01-01
  • 2021-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-22
  • 1970-01-01
  • 1970-01-01
  • 2015-06-28
相关资源
最近更新 更多