如何在DjangoJavaScript中打开编辑部分而不刷新每篇文章的页面?
这是我的html模板:如何在DjangoJavaScript中打开编辑部分而不刷新每篇文章的页面?,javascript,html,css,django,Javascript,Html,Css,Django,这是我的html模板: <div class="posts"> <h3> <a href ="{% url 'profile' p.user.id %}"> {{p.user}}: </a> </h3> <p>{{p.timestamp}}</p> <br> <p><i class="fas fa-heart"&
<div class="posts">
<h3> <a href ="{% url 'profile' p.user.id %}"> {{p.user}}: </a> </h3> <p>{{p.timestamp}}</p>
<br>
<p><i class="fas fa-heart"></i> {{ p.likes.count }}</p>
<p style="text-align: center;"> {{ p.post }} </p>
{% if p.user.id == user.id %}
<button class="btn btn-primary edit" style="display: inline;">Edit</button><hr></div>
<div id="editsec">
<textarea rows=6 cols=100 style="opacity: 0.7;">{{p.post}} </textarea>
<form action=""><button class="btn btn-success">Save</button></form>
</div>
{% endif %}
{% endfor %}
{{p.timestamp}}
{{p.likes.count}
{{p.post}
{%if p.user.id==user.id%}
编辑
{{p.post}}
拯救
{%endif%}
{%endfor%}
现在在css中,我隐藏了editsec,因此只有当用户单击edit按钮时,它才会显示editsec div并隐藏posts div。下面是Javascript代码:
document.addEventListener('DOMContentLoaded', function() {
var edit = document.getElementsByClassName('edit')
for (var i = 0 ; i < edit.length; i++) {
edit[i].addEventListener('click', () => {
document.getElementById('editsec').style.display = "block";
document.querySelector('.posts').style.display = "none";
});
}
});
document.addEventListener('DOMContentLoaded',function(){
var edit=document.getElementsByClassName('edit')
对于(变量i=0;i{
document.getElementById('editsec').style.display=“block”;
document.querySelector('.posts').style.display=“无”;
});
}
});
现在,如果我在主页上有两篇文章,如果我点击第二篇文章的编辑按钮,它仍然显示第一篇文章的editsec div
我尝试将此editsec设置为一个类,并执行了以下操作:
document.addEventListener('DOMContentLoaded', function() {
var edit = document.getElementsByClassName('edit')
var editsec = document.getElementsByClassname('editsec')
for (var i = 0 ; i < edit.length; i++) {
edit[i].addEventListener('click', () => {
for (var a = 0 ; a < edit.length; a++) {
editsec[a].style.display = "block";
document.querySelector('.posts').style.display = "none";
}
});
}
});
document.addEventListener('DOMContentLoaded',function(){
var edit=document.getElementsByClassName('edit')
var editsec=document.getElementsByClassname('editsec')
对于(变量i=0;i{
对于(var a=0;a
现在,如果我单击一个编辑按钮,它将显示所有的editsec div,如何使它仅显示此特定帖子的编辑部分?我在创建帖子网站时也遇到了这个问题。 最好的办法就是这样。是给按钮和编辑div一个id,就像给按钮和div一个data id=“{p.id}}”一样 在javascript中,只需获取button dataset.id并仅在button dataset.id与div dataset.id相同时显示,然后显示该div 另外,你正在做CS50网站,因为它有一个类似的项目。 这是我的 如果你不做CS50网站,我会推荐给你。
这是哈佛大学的一门很棒的课程。如果你想创建动态内容,不要把它放在模板中,而是放在你的js代码中 我建议您不要在views.py中呈现模板,而是1)返回帖子的json响应 2)在js代码中获取帖子的数据,并创建一个用于显示帖子的元素,使用
document.QuerySelecctor(".posts").innerHtml = data
3)现在添加编辑部分,如下所示:
const bigsection = document.createElement('div');
bigsection.id = `button-div-${post.id}`;
// make this section hidden until user clicks the edit button
const editsec = document.createElement('div');
editsec.style.display = 'none';
editsec.id = `edit-div-${post.id}`; Now you give each of your section different id accordingly.
let form = `<textarea class="form-control" id="content-${post.id}" name="post_content">`
+ `${post.content}</textarea>;
editsec.innerHTML = form; // now changed the content of your div
}
const bigsection=document.createElement('div');
bigsection.id=`button div-${post.id}`;
//将此部分隐藏,直到用户单击“编辑”按钮
const editsec=document.createElement('div');
editsec.style.display='none';
editsec.id=`edit div-${post.id}`;现在,您可以相应地为每个分区指定不同的id。
设形式=``
+`${post.content};
editsec.innerHTML=form;//现在更改了div的内容
}
将按钮添加到事件侦听器中,就像用户单击按钮时所做的那样,它将显示动态内容。这可能有助于解决您的问题