首页 > 解决方案 > 在 Django 中访问多个模板中的模型项

问题描述

我有一个指向主页的视图。在我的主页上,我有

{% for item in items %}
  {{ item.name }}<br>
  {{ item.title }}
{% endfor %}

我找不到在另一个页面中访问相同项目的方法。在其他页面中编写相同的代码不会返回任何内容。我该怎么办呢?

标签: pythondjango

解决方案


您需要一种方法来引用您传递到主页上下文的对象(项目)或查询集(项目)。对于每个项目,您可以通过将pkItem 对象的 * 作为 URL 关键字参数 (aka kwarg) 来执行此操作。

* 'pk' 表示'主键'。就像每个对象的 ID 号一样。

将此添加到您的urlpatternsin urls.py

path('items/<pk>/', views.item_detail, name='item_detail'),

现在,当给定适当的pk, 和视图名称时,您可以在模板中“反转”(即生成)URL。

例如,在您的主页模板代码中,您可以item像这样为每个模板创建一个链接:

<a href="{% url 'item_detail' pk=item.pk %}">{{ item.title }}</a>

现在,每个链接都会根据pk您创建的每个 Item 对象生成一个 URL。

如果您在查看页面时加载页面的 HTML,您会看到 {% url %} 标记已被 URL 替换,例如http://localhost:8000/items/2/.

现在,您可以在您的视图中创建一个item_detail视图,该视图views.py将显示每个项目的详细信息:

from django.shortcuts import render

from [your_app].models import Item

def item_detail(request, pk):

    item = Item.objects.get(pk=pk)

    return render(request, 'item_detail.html', {'item': item})

templates并在您的目录 ( )中为新视图创建一个 HTML 模板item_detail.html

<h1>{{ item.name }}</h1>

<p>{{ item.title }}</p>

现在每个页面都会自动显示每个对象的详细信息。


推荐阅读