oammari a
oammari a

Reputation: 33

return to function from another function

i have a table which include all users and two columns at the end (Edit,Delete) and i just enabled the delete column, the issue is when i click on the delete icon the record will be deleted but the url will stuck on the delete function even if i used return render(request,'getUsersInfo.html') which is get all records function

Model Name: Users

urls:

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'),

in the same view i have 3 functions (singup "add user", getAllUsers "get all the records to the table,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')

Notice that i used return render(request,'getUsersInfo.html') which should call getAllUsers(request): but the url stuck on http://127.0.0.1:8000/deleteUser/John/

Upvotes: 2

Views: 101

Answers (1)

willeM_ Van Onsem
willeM_ Van Onsem

Reputation: 476699

Rendering the same template as another view does not mean that you will somehow call other views. A template is nothing more than a tool to specify how to convert context data to a string, that is passed as HTTP response. You can use the same template in multiple views, and a view can render multiple templates.

You can make use of redirect(..) [Django-doc] to return a HTTP redirect response (302):

from django.shortcuts import redirect

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

Note: A GET request is not supposed to have side-effects, hence removing objects when a user makes a GET request, is not compliant with the HTTP standard. Therefore it might be better to remove a User with a POST request.

Upvotes: 1

Related Questions