Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django中,如何在同一页面中的按钮单击时根据其类别显示内容?_Python_Html_Django_Django Models_Django Templates - Fatal编程技术网

Python 在Django中,如何在同一页面中的按钮单击时根据其类别显示内容?

Python 在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

我正在做一个投资组合项目。我必须根据项目类别对项目进行分类。我已经给了每个类别的按钮,我必须在它们下面的按钮点击上显示各个类别的每个内容。 我有两个设计类的项目。当我点击设计时,我应该在按钮下面看到这两个项目

我尝试筛选内容,并成功地将其显示在其他页面中,但无法在同一页面中显示

这是我的密码: 型号.py

类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。在我发布的另一个答案中,也许更好地解释了这一点:明白了!非常感谢。