Как выполнить определенную операцию нажатием кнопки - PullRequest
1 голос
/ 01 июня 2019

Я хочу выполнить более двух операций на одной HTML-странице одним нажатием кнопки.В строке меню есть 5 вариантов.то есть, когда я нажимаю Домой, он выполняет некоторую операцию, а когда я щелкаю профиль, он выполняет определенную операцию.Я пишу отдельные функции для каждой операции.Как выполнить несколько функций для одной страницы.

views.py

def home(request):
    return render(request, 'index.html', {})


def profile(request):
    if request.method == 'POST':
        form = ProfileForm(request.POST)
        if form.is_valid():
            first_name = request.session['username']
            print(first_name)
            test = Profile.objects.filter(first_name=first_name).values()
            for i in test:
                dict1 = i
                return render(request, 'index.html',
                              {'first_name': first_name, 'last_name': dict1['last_name'],
                               'phone_number': dict1['phone_number'], 'email': dict1['email'],
                               'address': dict1['address'], 'image': dict1['image']})
    else:
        form = ProfileForm()
        return render(request, 'profile.html', {'form': form})

def friends(request):
    friends_obj = Friends.objects.all()
    return render(request, 'index.html', {'friends_obj': friends_obj})

urls.py

urlpatterns = [
    path('home/', views.home, name="home"),
    path('profile/', views.profile, name="profile"),
    path('friends/', views.friends, name="friends"),
]

строка меню выглядит следующим образом Я хочу выполнить все операции, нажав пункты меню.

1 Ответ

0 голосов
/ 01 июня 2019

def friends(request): и def home(request): с методом Get и def profile(request): с методом Post. поэтому первым шагом мы можем разделить их на if request.method == "POST". для отдельного процесса с тем же методом нам нужно прикрепить некоторый флаг к процессу из внешнего интерфейса (Html-javascript и т. д.) перед отправкой в ​​django view.someth следующим образом: template.html:

<form action="/navbar_aggregation" method="get">
  <input type="text" name="type" value="friends" hidden> 
  <!-- other input tag will be here as you need--> 
  <input type="submit" value="Submit">
</form>

тогда вы можете получить доступ к типу в виде, как это. view.py:

def navbar_aggregation(request):
    type = request.get.Get("type")  # name of hidden input 
    if (type == "friends"):
        # do same thing like 'def freinds(request)'
    elif(type == "family"):
        # do process for family form
    else :
        # do process for 'def home(request)'

так что теперь мы знаем, как можно разделить method = "Get" или method = "POST". поэтому ваш взгляд будет таким:

view.py:

def navbar_aggregation(request):
   if request.method == "POST":
         form = ProfileForm(request.POST)
         if form.is_valid():
            first_name = request.session['username']
            print(first_name)
            test = Profile.objects.filter(first_name=first_name).values()
            for i in test:
                dict1 = i
                return render(request, 'index.html',
                              {'first_name': first_name, 'last_name': dict1['last_name'],
                               'phone_number': dict1['phone_number'], 'email': 
                                  dict1['email'],
                               'address': dict1['address'], 'image': dict1['image']})       
   else : # we are in method="GET"
      type = request.get.Get("type")  # name of hidden input 
      if(type == "friends"):
              friends_obj = Friends.objects.all()
              return render(request, 'index.html', {'friends_obj': friends_obj})
      elif(type == "form"):
            form = ProfileForm()
            return render(request, 'profile.html', {'form': form})
      elif(type == "foo"):
            # do something for foo's form 
            return something
      else:  # for sure it should be home's request because haven't any tag for "type"
         return render(request, 'index.html', {})

Дорогой друг, я тоже новичок в django, поэтому я думаю, что в моем коде ответа есть какая-то ошибка, но, возможно, я помогу тебе. Я ответил на твой вопрос, потому что не вижу ни одного профессионального разработчика, который бы отвечал на твой вопрос.

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