вернуться к функции из другой функции - PullRequest
2 голосов
/ 12 апреля 2020

У меня есть таблица, которая включает в себя всех пользователей и два столбца в конце (Редактировать, Удалить), и я просто включил столбец удаления, проблема в том, что когда я нажимаю на значок удаления, запись будет удалена, но URL-адрес застрянет на функцию удаления, даже если я использовал return render(request,'getUsersInfo.html'), которая является функцией получения всех записей

Название модели: Пользователи

URL:

from django.urls import path
from django.conf.urls import url
from . import views
urlpatterns = [
path('signup.html',views.signup,name=''),
path('getUsersInfo.html',views.getAllUsers,name=''),
url(r'^deleteUser/(?P<fullname>\D+)/$',views.deleteUser, name='deleteUser'),
# this is how to call a function without parameters url(r'^deleteUser/$',views.deleteUser,    name='deleteUser'),

в том же виде у меня есть 3 функции (подпрограмма «добавить пользователя», getAllUsers »получить все записи в таблице, deleteUser)

views:

def getAllUsers(request):
print("getAllUsers")
thesearchValue = ''
if 'SearchValue' in request.GET:
    thesearchValue = request.GET['SearchValue']
    print(request.GET['SearchValue'])
    allUsers = User.objects.filter(fullname__icontains=thesearchValue)#all()
    # return render(request,'getUsersInfo.html',{'allUsers':allUsers})
    return render(request,'getUsersInfo.html',{'allUsers':allUsers})
else:
    print("Empty")
    allUsers = User.objects.all()
    return render(request,'getUsersInfo.html',{'allUsers':allUsers})

def deleteUser(request,fullname):
print('delete the user')
todelete = User.objects.filter(fullname=fullname)
todelete.delete()
return render(request,'getUsersInfo.html')

Обратите внимание, что я использовал return render(request,'getUsersInfo.html'), который должен вызвать getAllUsers(request): но URL застрял на http://127.0.0.1: 8000 / deleteUser / John /

1 Ответ

1 голос
/ 12 апреля 2020

Визуализация того же шаблона, что и в другом представлении, не означает, что вы как-то вызовете другие представления. Шаблон - это не что иное, как инструмент, указывающий, как преобразовать данные контекста в строку, которая передается как HTTP-ответ. Вы можете использовать один и тот же шаблон в нескольких представлениях, и представление может отображать несколько шаблонов.

Вы можете использовать redirect(..) [Django -doc] чтобы вернуть ответ HTTP перенаправления (302):

from django.shortcuts import redirect

def deleteUser(request,fullname):
    print('delete the user')
    todelete = User.objects.filter(fullname=fullname)
    todelete.delete()
    return <b>redirect(getAllUsers)</b>

Примечание : GET-запрос не должен иметь side- эффекты , следовательно, удаление объектов, когда пользователь делает запрос GET, не соответствует стандарту HTTP. Поэтому может быть лучше удалить User с помощью запроса POST.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...