Вопрос о рендеринге в 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 он здесь