Django: Передача переменной из представления в представление через url-ссылку
Я изучаю Django и в рамках проекта пытаюсь сослаться на тему из представления1 под названием "page" (содержащую контент), чтобы передать ее в представление2 под названием "editpage" (где я могу редактировать соответствующую тему).
Я считаю, что один из способов сделать это - через сессии, но учитывая, что мне нужно ссылаться на тему только один раз, когда пользователь хочет отредактировать вид1 - есть ли способ передать тему из вида1 в вид2 без сессий и забыть тему после редактирования?
Из лучшего ответа на вопрос ниже, кажется, что я могу сделать это с помощью редиректов? Но я не могу найти способ использовать редиректы с url ссылками. Django Передача данных между представлениями
Моя попытка заключалась в том, чтобы url страницы редактирования содержал тему из представления 1, но я не знаю, как передать тему между двумя представлениями.
Приведенный ниже код для page и editpage в urls.py, views.py, page.html и editpage.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 %}
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 %}
Заранее спасибо и благодарю за любую помощь!
Вы должны добавить параметр к вашей ссылке url следующим образом...
<a href="{% url 'editpage' topic=topic %}">Edit this page</a><br>