Django - Передача дополнительного аргумента из шаблона в urls.py для представления на основе класса
В принципе, я хотел бы перейти от страницы, показывающей таблицу (которая является результатом запроса пользователя), к странице, где пользователь может редактировать запись в таблице (эта страница построена с использованием UpdateView), а затем сразу вернуться к предыдущей странице, но на этот раз показывая таблицу с отраженным новым обновлением
Здесь есть другие сообщения о похожих ситуациях, но ни в одном из них не показано, как реализовать это с помощью представления на основе класса, поэтому любой совет здесь будет очень признателен.
На данный момент я пришел к следующему подходу. Здесь я пытаюсь передать параметр, содержащий URL страницы таблицы, из шаблона страницы таблицы в urls.py, а затем в представление. Однако я не думаю, что использую правильный синтаксис в urls.py, так как значение параметра previous_url в представлении просто "previous_url".
Ссылка в шаблоне для страницы таблицы
<a href="{% url 'entry_detail' item.pk %}?previous_url={{ request.get_full_path|urlencode }}">Edit</a>
URL
path('entry/<int:pk>/edit/', EntryUpdateView.as_view(previous_url="previous_url"), name='entry_update'),
View
class EntryUpdateView(LoginRequiredMixin, UpdateView):
model = Entry
template_name = 'entry_update.html'
fields = ('source', 'target', 'glossary', 'notes')
previous_url = ""
def form_valid(self, form):
obj = form.save(commit=False)
obj.updated_by = self.request.user
obj.save()
return HttpResponseRedirect(self.previous_url)
Обновление формы
<form method="POST" novalidate>
{% csrf_token %}
<div class="mb-3">
{{ form.source|as_crispy_field }}
</div>
<div class="mb-3">
{{ form.target|as_crispy_field }}
</div>
<div class="mb-3">
{{ form.glossary|as_crispy_field }}
</div>
<div class="mb-3">
{{ form.notes|as_crispy_field }}
</div>
<div class="text-center mt-3">
<button type="submit" class="btn btn-outline-primary mx-2">Update</button>
</div>
</form>
Ошибка
Page not found (404)
Request Method: GET
Request URL: http://localhost:8000/entry/5131/edit/previous_url
Если это кому-то поможет, я смог получить значение previous_url внутри form_valid(), используя self.request.GET.get('previous_url').
def form_valid(self, form):
obj = form.save(commit=False)
obj.updated_by = self.request.user
obj.save()
previous_url = self.request.GET.get('previous_url')
return HttpResponseRedirect(previous_url)