Python 在Django中,如何在同一页面中的按钮单击时根据其类别显示内容?
我正在做一个投资组合项目。我必须根据项目类别对项目进行分类。我已经给了每个类别的按钮,我必须在它们下面的按钮点击上显示各个类别的每个内容。 我有两个设计类的项目。当我点击设计时,我应该在按钮下面看到这两个项目 我尝试筛选内容,并成功地将其显示在其他页面中,但无法在同一页面中显示 这是我的密码: 型号.pyPython 在Django中,如何在同一页面中的按钮单击时根据其类别显示内容?,python,html,django,django-models,django-templates,Python,Html,Django,Django Models,Django Templates,我正在做一个投资组合项目。我必须根据项目类别对项目进行分类。我已经给了每个类别的按钮,我必须在它们下面的按钮点击上显示各个类别的每个内容。 我有两个设计类的项目。当我点击设计时,我应该在按钮下面看到这两个项目 我尝试筛选内容,并成功地将其显示在其他页面中,但无法在同一页面中显示 这是我的密码: 型号.py 类PortfolioCategory(models.Model): projectCategory=models.CharField(最大长度=200) projectSummary=mode
类PortfolioCategory(models.Model):
projectCategory=models.CharField(最大长度=200)
projectSummary=models.CharField(最大长度=300)
projectLink=models.CharField(最大长度=200)
类元:
详细名称复数=“类别”
定义(自我):
返回self.projectCategory
课程组合(models.Model):
projectName=models.CharField(最大长度=250)
projectLink=models.CharField(最大长度=50,默认为“”)
projectImage=models.ImageField(上传到=“img/Portfolio/”)
projectContent=models.TextField(默认值为“”)
projectCategory=models.ForeignKey(
PortfolioCategory,verbose_name=“Category”,on_delete=models.CASCADE)
定义(自我):
返回self.projectName
视图.Py
def projectLink(请求,projectLink):
category=[PortfolioCategory.objects.all()中c的c.projectLink]
如果projectLink在类别中:
categoryItems=Portfolio.objects.filter(
项目类别(项目链接=项目链接)
myProjects=categoryItems.all()
返回渲染(
要求
“main/home.html#projectLink”,
{
“项目”:我的项目,
“导航栏”:导航栏,
}
)
projectContent=Portfolio.objects.get(projectLink=projectLink)
返回渲染(
要求
“main/projectItem.html”,
{
“项目”:项目内容,
“导航栏”:导航栏,
}
)
def主页(请求):
返回渲染(
请求=请求,
template_name=“main/home.html”,
上下文={
“公文包”:公文包.objects.all,
“类别”:PortfolioCategory.objects.all,
“导航栏”:导航栏,
“社会链接”:社会党人,
“技能集”:技能,
})
home.html
<ul class="nav nav-tabs justify-content-center">
{% for cat in categories %}
<li><a data-toggle="tab" href="#{{cat.projectLink}}">{{cat.projectCategory}}</a></li>
{% endfor %}
</ul>
<div class="tab-content">
{% for cat in categories %}
<div id="{{cat.projectLink}}" class="tab-pane fadeIn">
{{cat.projectCategory}}
//Projects Detail Here
</div>
{% endfor %}
</div>
{%类别中的类别为cat%}
{%endfor%}
{%类别中的类别为cat%}
{{cat.projectCategory}
//项目详情请参见此处
{%endfor%}
我必须在单击按钮时显示每个项目的卡片。如果您想在不刷新页面的情况下检索数据,应该使用AJAX异步调用视图 您可以使用
XMLHttpRequest
或基于承诺的全新fetch()
您可以将流程分为以下步骤:
1) 在urls.py
中创建一个目标,该目标将调用负责从数据库检索类别的视图
path('some-destination/', views.get_category, name="get_category")
2) 使用javascript对新URL进行异步调用
function callFunc() {
fetch('some-destination/').then(
function(response) {
if (response.status == 200) {
//manipulate and format your data here
//you may need to use `then()` again
}
}).catch(function(err) {
console.log('Fetch Error', err);
});
}
3) 在views.py中创建一个函数,用于检索所需的对象或数据。如果需要,将其序列化为JSON并返回对AJAX调用的响应
<input type="button" onclick="callFunc()" value="get categories">
现在,您的按钮只需要启动AJAX调用
<input type="button" onclick="callFunc()" value="get categories">
如果您不熟悉承诺,只需使用XMLHttpRequest或JQuery的AJAX即可我是Django新手。所以,如果你能更详细地解释,那对我会有好处的。事实上,我不明白你的意思。在第2步中,我应该在
if语句中做什么。我可以在views.py中创建函数,但它应该返回什么。那某个目的地/
有什么作用呢。是我的主页还是新的网址。如果这是新的,那么如何将其链接到我的主页(公文包页面)?谢谢。在URL.py文件中,您需要创建一个指向负责检索和操作数据的函数的URL路由。在我的示例中,我任意将其称为某个目的地/
,当然,您可以将其更改为您喜欢的任何内容。然后使用AJAX异步调用该函数。您的函数应该返回对javascript函数的HttpResponse。在我发布的另一个答案中,也许更好地解释了这一点:明白了!非常感谢。