Django:通过 url link 将变量从视图传递到视图

Django: Passing variable from view to view via url link

我正在学习 Django,并且作为项目的一部分,我正在尝试从名为“page”(包含内容)的 view1 中引用一个主题,并将其传递到名为“editpage”的 view2(我可以在其中编辑相应的主题) .

我相信一种方法是通过会话来做到这一点,但鉴于我只需要在用户想要编辑视图 1 时引用一次主题 - 有没有一种方法可以在没有会话的情况下将主题从视图 1 传递到视图 2并在编辑完成后忘记主题?

从下面问题的最佳答案来看,我似乎可以通过重定向来做到这一点?但是我找不到使用 url 链接重定向的方法。 Django Passing data between views

我尝试的方法是让编辑页面 url 包含视图 1 中的主题,但我不知道如何在两个视图之间传递主题。

尝试在 urls.py、views.py、page.html 和编辑page.html 中的页面和编辑页面编写以下代码:

urls.py

from django.urls import path
from . import views

urlpatterns = [
    path("editpage/<str:topic>", views.editpage, name="editpage"),
    path("<str:topic>", views.page, name="page"),
]

views.py

from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect
from django.urls import reverse
from django import forms
from . import util

def page(request, topic):
    if util.get_entry(f"{topic}"):
        return render(request, "encyclopedia/page.html", {
            "content": util.get_entry(f"{topic}"), "topic": f"{topic}"
        })
    else:
        return render(request, "encyclopedia/notfound.html")

def editpage(request, topic):
    if request.method == "POST":
        title = request.POST.get("topic")

        # need to pull the title from the previously linked page

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

page.html

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

{% block title %}
    {{ topic }}
{% endblock %}

{% block body %}
    <a href="{% url 'editpage' %}">Edit this page</a><br>
    {{ content }}

{% endblock %}

编辑page.html

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

{% block title %}
    Edit Page 
{% endblock %}

{% block body %}
    <h1>Edit page</h1>

    <form action="{% url 'editpage' %}" method="post">
        {% csrf_token %}
        {{ form }}
        <input type="submit" value="submit">    
    </form>


{% endblock %}

提前致谢并感谢您的帮助!

您必须像这样将参数添加到您的 url link...

    <a href="{% url 'editpage' topic=topic %}">Edit this page</a><br>