理想页面未显示

时间:2018-01-02 04:17:05

标签: python django

未显示理想页面。 我在views.py中写道

def top(request):
    content = POST.objects.order_by('-created_at')[:5]
    return render(request, 'top.html',{'content':content})

def detail(request,pk):
    content = POST.objects.order_by('-created_at')[:5]
    return render(request, 'detail.html',{'content':content})
top.html中的

<div>
         {% for item in content %}
            <h2>{{ item.title }}</h2>
            <p><a href="{% url 'detail' content.pk %}">SHOW DETAIL</a></p>
         {% endfor %}
</div>

in detail.html

<div>
   <h2>{{ content.title }}</h2>
   <p>{{ content.text }}</p>
</div>
在urls.py中

urlpatterns = [
    path('top/', views.top, name='top'),
    path('detail/<int:pk>/',views.detail , name='detail'),
]

当我访问top方法时,会显示top.html。当我点击SHOW DETAIL url链接时,会显示detail.html。但是在这个detail.html中,内容总是相同的。我想在点击时创建一个系统这个链接,详细内容每个content.pk都被更改了。但是现在我的系统不是我理想的。为什么我的系统总是在detail.html中返回相同的内容?我应该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

嗯,你没有拉动被请求的对象 - 它只是拉动列表的同一个查询。您需要使用Model.objects.get()来检索对象的详细信息。

def detail(request,pk):
    # Get the object with the matching pk
    content = POST.objects.get(id=pk)
    return render(request, 'detail.html',{'content':content})

您还应该查看Class Based Views (CBVs),因为您可以使用DetailViewListView简化您的工作。

答案 1 :(得分:0)

def detail(request,pk):
    content = POST.objects.order_by('-created_at')[:5]
    return render(request, 'detail.html',{'content':content})

您没有使用主键(pk)执行任何操作。您转到数据库并获取最近的5个帖子。你不希望它是:

def detail(request,pk):
    content = POST.objects.get(pk=pk)
    return render(request, 'detail.html',{'content':content})

由于您是为视图执行此操作,因此我建议您先查看get_object_or_404

答案 2 :(得分:0)

我认为您在content中使用了item变量而不是top.html,它始终从列表中获取第一个元素的pk。检查以下代码。

<div>
         {% for item in content %}
            <h2>{{ item.title }}</h2>
            <p><a href="{% url 'detail' item.pk %}">SHOW DETAIL</a></p>
         {% endfor %}
</div>