未显示理想页面。 我在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中返回相同的内容?我应该如何解决这个问题?
答案 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),因为您可以使用DetailView
和ListView
简化您的工作。
答案 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>