Любая операция изменения состояния (например, удаление) должна выполняться как POST, тогда как любая операция чтения должна выполняться как GET.Кроме того, вам нужно выполнить перенаправление после любого успешного POST, чтобы публикация не выполнялась снова, если пользователь нажимает кнопку возврата.
Так что-то вроде:
urls.py
...
(r'^characters/delete/$', views.delete_character),
(r'^characters/$', views.list_characters),
и views.py
def list_characters(request):
query_params = request.GET.get('q', '')
ctx = template.Context({
...,
query_params=urllib.quote(query_params) # <=== pass the query params to the template
})
return render(request, 'users/characters_found_table.html', ctx)
в шаблоне создайте ссылки для удаления, например, так:
<form action="delete/" method=POST>
<input type=hidden name=q value="{{ query_params }}">
<input type=hidden name=idChar value="{{ ... }}">
<button type=submit>delete</button>
</form>
, тогда представление удаления можно записать как
def delete_character(request):
chracter_id = request.POST['idChar'] # fail hard if not provided
q = request.POST['q']
Characterweapons.objects.filter(characterid=chracter_id ).delete()
Characters.objects.filter(characterid=chracter_id ).delete()
return http.HttpResponseRedirect('../?q=' + q) # return to the list url (with search params)
Таким образом, вам не нужно сохранять глобальное состояние.