首页 > 解决方案 > 如何在 Django 中动态生成页面?

问题描述

我正在 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/item1site.com/项目2

问题:我无法为每个项目创建视图和模板,因为列表会增长。为每个视图创建一个视图、一个模板和一个 url 不是一个可行的解决方案。

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

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

问题是我对 Django 还很陌生,所以我不知道如何实际应用这种方法。

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

标签: pythondjangodjango-templatesdjango-viewsdjango-urls

解决方案


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

视图.py:

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 })

将以下行添加到 urlpatterns

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

详细模板

{% extends "main/header.html" %}
{% block content %}
<body>
    <div class="item-detail">
        <h1> Detail </h1>
        <p>{{ item.name }}</p>
    </div>
</body>
{% endblock %}

推荐阅读