Вопрос о рендеринге в django , jsonresponse

Я работаю над представлением сотрудника. В этом представлении у меня есть 2 контейнера. Один предназначен для имен сотрудников, а другой должен показывать информацию, как только я нажимаю на имя. Я пытаюсь разобраться с этим уже 3 дня, но не могу понять, может кто-нибудь поможет мне

индекс представления, в котором будет производиться рендеринг

def index(request):
employe = Employe.objects.all()

context = {
    'employe': employe,

}

return render(request, 'managements/index.html', context)
    

представление jsonresponse находится здесь

def employeInfo(request):
data = json.loads(request.body)
employeId = data['id_s']
action = data['action']
print(employeId)
print(action)
if action == 'get':
    check = Employe.objects.get(id=employeId)
    checkinfo, create = Employe.objects.get_or_create(object, id=employeId)
    print('check:', check, 'checkinfo', checkinfo)



return JsonResponse('context', safe=False)

шаблон здесь, я попробовал несколько комбинаций nvm для этого.

    <div class="flex-container">
     <div class="flex-child magenta" >
     <div data-method="POST"   id="label1"> Medewerker info</div>
            {% csrf_token %}

            {% if action %}
            <ul>{{name.employe_info}}</ul>
            <ul>{{surname.checkinfo}}</ul>
            <ul>{{checkinfo.id}}</ul>
            <ul>{{rank.id}}</ul>
            <ul>{{employeInfo.name}}</ul>
            <ul>{{email.id}}</ul>
            <ul>{{phone.id}}</ul>
            <ul>{{name.id}}</ul>

            {% endif %}
<tr>
      <div class="flex-child green">
          <div id="label2"> Medewerke</div>
          {% for profile in employe %}
                <button id="hehe" data-id_s={{profile.id}} data-action="get" class=" btn-sm btn-outline-secondary info-employe">
                <a>{{ profile.name}}</a></button>


           {% endfor %}
      </div>

</tr>

Я пытаюсь уже 3 дня и никакого прогресса. спасибо заранее

Вы пытаетесь реализовать что-то вроде AJAX-поведения?

Если у вас есть кнопка, с помощью которой вы отправляете POST, вы можете сделать следующее (обратите внимание, что вам нужно включить jquery, поскольку следующий код использует jquery для реализации AJAX):

<button type="submit" id="employee-info-btn" data-url="{% url 'url_to_your_view_handling_the_post' %}" value="Submit button"></button>

И затем иметь onclick функцию Javascript для обработки нажатия на кнопку:

$(document).on('click', '#employee-info-btn', function (e) {

    $.ajax({
        type: 'POST',
        url: $(this).data('url'),
        data: {
            // add any other HTML data attributes in this dictionary
            csrfmiddlewaretoken: getCookie('csrftoken'),
        },
        success: function (json_response) {
            // Successful AJAX response handling routine here
            // Show or hide any elements you want here e.g.
            var x = document.getElementById("id-of-element-you-want-to-show");
            x.style.display = "block";

            // or use the json_response here
        },
        error: function (xhr, errmsg, err) { }
    });
})

Для реализации функции getCookie() вы можете взглянуть на эту часть документации Django.

Я также не очень понимаю, как вы отправляете POST, но я рекомендую сделать это в виде формы с кнопкой отправки. См. эту часть документации о том, как это сделать.

    var updateBtns = document.getElementsByClassName('info-employe')

    for( var i = 0; i < updateBtns.length; i++) {
updateBtns[i].addEventListener('click', function(){
    var id_s = this.dataset.id_s
    var action = this.dataset.action
    console.log('id_s:', id_s, 'action:', action)

if (user === 'AnonymousUser'){
    console.log('User is not authenticated')
}else{
    infoUser(id_s, action)
    console.log('user is authenticated')
    }
})

}

    function infoUser(id_s, action){
   var url = '/employe_info/'

fetch(url, {
    method: 'POST',
    headers:{
        'Content-Type':'application/json',
        'X-CSRFToken': csrftoken,
    },
    body:JSON.stringify({'id_s': id_s, 'action': action})
     })
  .then((response)=>{
    return response.json()
  })
  .then((data)=>{
   console.log('data:', data)
   location.reload()
 })

}

простите забыл js он здесь

Вернуться на верх