【问题标题】:Django: Passing variable from view to view via url linkDjango:通过url链接在视图之间传递变量
【发布时间】: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 %}
  • 谢谢伊恩!我试图为您的评论点赞,但似乎只有答案可以点赞或“打勾”。无论您的回复如何,都想承认并感谢您。 :)

标签: django variables view


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-14
    • 2012-09-30
    • 1970-01-01
    相关资源
    最近更新 更多