如何在 Django 中动态生成页面?
How can i generate a page dynamically in 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
。
这就是我正在尝试做的事情:对于这些项目中的每一个,当我打开该项目的 link 时,应该会打开一个新页面,其中包含有关该项目的数据,如下所示:
网站.com/item1,或网站.com/item2
问题:我无法为每个项目创建视图和模板,因为列表会增长。为每个创建一个视图、一个模板和一个 url 不是一个可行的解决方案。
一种可能的方法:创建一个生成标准页面的视图并将 link 附加到该页面,如下所示:
site.com/items/item-here
,例如site.com/items/item15
问题是我对 Django 还很陌生,所以我不知道如何实际应用这种方法。
有人可以提示我应该从这里去哪里吗?每一个建议表示赞赏。我希望我的问题是可以理解的。
您可以使用 FBV。需要一个视图和一个模板。
Views.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 %}
我正在用 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
。
这就是我正在尝试做的事情:对于这些项目中的每一个,当我打开该项目的 link 时,应该会打开一个新页面,其中包含有关该项目的数据,如下所示: 网站.com/item1,或网站.com/item2
问题:我无法为每个项目创建视图和模板,因为列表会增长。为每个创建一个视图、一个模板和一个 url 不是一个可行的解决方案。
一种可能的方法:创建一个生成标准页面的视图并将 link 附加到该页面,如下所示:
site.com/items/item-here
,例如site.com/items/item15
问题是我对 Django 还很陌生,所以我不知道如何实际应用这种方法。
有人可以提示我应该从这里去哪里吗?每一个建议表示赞赏。我希望我的问题是可以理解的。
您可以使用 FBV。需要一个视图和一个模板。
Views.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 %}