【发布时间】:2021-12-20 01:03:45
【问题描述】:
我正在学习 Django,作为项目的一部分,我试图从 view1 中引用一个名为“page”(包含内容)的主题,然后将其传递给名为“editpage”的 view2(我可以在其中编辑相应的主题)。
我相信这样做的一种方法是通过会话,但鉴于我只需要在用户想要编辑 view1 时引用一次主题 - 有没有办法在没有会话的情况下将主题从 view1 传递到 view2 并忘记编辑完成后的主题?
从以下问题的最佳答案来看,我似乎可以通过重定向来做到这一点?但我找不到使用带有 url 链接的重定向的方法。 Django Passing data between views
我尝试的方法是让 editpage url 包含来自 view1 的主题,但我不知道如何在两个视图之间传递主题。
为 urls.py、views.py、page.html 和 editpage.html 中的 page 和 editpage 尝试以下代码:
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 %}
editpage.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 %}
提前致谢并感谢任何帮助!
【问题讨论】:
-
只需要在page.html的url标签中加上
topic=topic?{% url 'editpage' topic=topic %} -
谢谢伊恩!我试图为您的评论点赞,但似乎只有答案可以点赞或“打勾”。无论您的回复如何,都想承认并感谢您。 :)