如何在Django中动态生成页面?

时间:2019-06-15 20:45:03

标签: python django django-templates django-views django-urls

我正在Django中建立一个网站,但我有点受以下问题困扰。

在我的 home.html 中,我有一个看起来像这样的列表:

{% extends "main/header.html" %}


{% block content %}


<body>


<div class="itemlist">
    <ul>
        <li><a href="item1">Item 1</a></li>
        <li><a href="item2">Item 2</a></li>
        <li><a href="item3">Item 3</a></li>
        <li><a href="item4">Item 4</a></li>
    </ul>

</div>

</body>



{% endblock %}

此列表是动态更新的,因此会有更多且不同的items

这就是我要执行的操作:对于每个项目,当我打开项目的链接时,应该打开一个新页面,其中包含有关该项目的数据,如下所示: site.com/item1 site.com/item2

问题:由于列表会增加,因此无法为每个项目创建视图和模板。为每个视图创建视图,模板和URL都不可行。

一种可能的方法:创建一个视图,该视图生成一个标准页面,并将链接附加到该页面,如下所示:

site.com/items / item-here ,例如 site.com/items/item15

问题是我刚接触Django,所以我不知道如何实际应用这种方法。

有人可以给我提示我应该从这里去吗?每个建议都表示赞赏。我希望我的问题是可以理解的。

1 个答案:

答案 0 :(得分:1)

您可以使用FBV。需要一个视图和一个模板。

Views.py:

  !**/*.Test.csproj
  **/*.csproj

将以下行添加到urlpatterns

from django.shortcuts import get_object_or_404, render

def render_items(request, item_name):
    item = get_object_or_404(YOUR_MODEL, YOUR_ITEM_FIELD_NAME=item_name)
    return render(request, 'YOUR_TEMPLATE.html', {'item': item })

详细信息模板

    path('items/<str:item_name>/',views.render_items, name='item'),