首页 > 解决方案 > Django 无法正确地从一个视图重定向到另一个视图

问题描述

我正在使用的应用程序的网页侧面有一个搜索栏,我想做的是让我的搜索视图接受用户的查询,将其与条目列表进行比较,如果用户输入匹配任何可用条目的标题,搜索应该重定向到另一个名为 title 的视图,该视图处理呈现用户搜索的条目的 HTML 文件,并将其与适当的 URL 匹配(即,如果用户搜索 Django条目,标题呈现所述条目的 HTML 文件并为其分配 URL “example.com/Django”)

问题在于,每次我从搜索重定向到标题时,标题都会呈现为没有条目与用户搜索的内容匹配的情况保留的 HTML 文件,无论条目是否可用。

还应该注意的是,搜索视图的路径是一团糟。如果我写这样的路径,path("<str:search>", views.search, name="search")我得到一个 NoReverseMatch 错误,说 Django 期待一个参数,但没有收到,但path("search", views.search, name=search)导致呈现的错误页面有 URL “example.com/search”,这不是我想要的,我想要它重定向到标题,以便标题视图分配正确的 URL。

我是 Django 的新手,所以我为这个冗长的问题道歉,但我已经解决这个问题好几天没有用了,下面是标题和搜索视图的代码,urls.py 和搜索栏的 HTML 代码(表格)。如果您需要,请务必询问更多信息。

预先感谢您的帮助。

HTML

<form action="{% url 'wiki:search' %}" method="POST">
    {% csrf_token %}
    <input class="search" type="text" name="q" placeholder="Search Encyclopedia">
</form>

视图.py

def title(request, title):
    entry = util.get_entry(title)

    if entry == None:
        return render(request, "encyclopedia/error.html")
    else:
        return render(request, "encyclopedia/entry.html", {
            "entry": entry,
        })

def search(request):
    if request.method == "POST":
        query = request.POST["q"]
        entries = util.list_entries

        if query in entries:
            if util.get_entry(query) == None:
                return render(request, "encyclopedia/error.html")
            else:
                return redirect('wiki:title', title=query)
    else:
        return render(request, "encyclopedia/index.html")

网址.py

app_name = "wiki"
urlpatterns = [
    path("", views.index, name="index"),
    path("<str:title>", views.title, name="title"),
    path("search", views.search, name="search")
]

标签: pythondjangoformsredirect

解决方案


推荐阅读