我在 django 中使用 return render(request, url) 是否错误? (CS50)

问题描述 投票:0回答:1

在使用 CS50 使用 Python 和 Javascript 进行 Web 开发的项目 1 中,我制作了一个表单类,该类应该创建一个新的 wiki 页面。

它应该在使用其“操作”触发一个函数之前获取输入,该函数完成后将从 addpage 页面返回到主页。但是使用 return render() 发送输入和其他必要的信息,同时重定向到主页(在其他函数中运行良好的东西)这次似乎不起作用。有一个短暂的重新加载,输入就消失了,没有重定向,并且 util.save_entry() 尚未创建新页面。

有人可以给我一个提示,我可能错在哪里吗?

谢谢。

添加新页面的页面

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

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

{%block head%}
    <link rel="stylesheet" href="styles.css">
{%endblock%}

{% block body %}
    <h1>New Page</h1>
    <div class="formwrapper">
        <form action = "{% url 'addpage' %}" method="post">
            {% csrf_token %}
            {{title}}
            <input type="submit">
        </form>
    </div>
{% endblock %}

我的网址:

from django.urls import path

from . import views

urlpatterns = [
    path("", views.index, name="index"),
    path("<str:page>", views.getpage, name="page"),
    path("addpage", views.addpage, name="addpage")
]

视图中添加页面功能:

def addpage(request):
    if request.method=="POST":
        title=NewTitle(request.POST)
        if title.is_valid():
            newtitle = title.cleaned_data["title"]
            util.save_entry(newtitle, "This is a new entry")
            return render(request, "encyclopedia\index.html", {
                "entries": util.list_entries(),
                "form":Search()
            })
            #make index change when it receives newtitle
    else:
        return render(request, "encyclopedia/addpage.html", {
            "form":Search(),
            "title":NewTitle()
        })

我尝试将其更改为 HttpResponseRedirect,但 CS50 中的讲座的方式似乎在这里不起作用。

我还摆弄了很多其他东西,比如表单内容本身,看看请求是否是问题,询问其他网站。 主要问题是它没有重定向到索引页面。

django django-views cs50
1个回答
0
投票

据我了解,您想要创建页面的实例并重定向到此页面。

from django.shortcuts import get_object_or_404
from django.shortcuts import render, redirect
from django.urls import reverse

def getpage(request, page):
    page = get_object_or_404(Page, link=page)
    enter code here

    return render(request, "encyclopedia/page.html", {
            "page":page,
             enter code here
        })

def addpage(request):
    if request.method=="POST":
        page=PageForm(request.POST)
        if page.is_valid():
            page.save()
            return redirect(reverse("page", kwargs={"page": page.link})
    else:
        return render(request, "encyclopedia/addpage.html", {
            "form":PageForm(),
        })

而且

path("str:page", views.getpage, name="page")
也应该放在 URL 的最后。这是因为页面 URL 可能与您的某些静态 URL 一致并覆盖主 URL。

并确保将字段

link
设置为
unique=True

© www.soinside.com 2019 - 2024. All rights reserved.