Как я могу динамически создать страницу в Django? - PullRequest
0 голосов
/ 15 июня 2019

Я создаю сайт в 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

Проблема в том, что я довольно новичок вДжанго, так что я не знаю, как применить этот подход на практике.

Может ли кто-нибудь дать мне подсказку, куда я должен идти отсюда?Каждый совет ценится.Я надеюсь, что моя проблема была понятна.

1 Ответ

1 голос
/ 16 июня 2019

Вы можете использовать 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 %}
...