如何将对象或对象id传递给另一个模板

时间:2016-03-29 14:20:54

标签: python django django-templates

我是Django框架的新手。 我有一个模板,显示数据库中所有对象的列表。单击列表中的任何对象时,应重定向到另一个页面,该页面显示该特定对象的对象详细信息。 目前,我已经能够获取数据库中的对象列表,但无法将对象ID转发到下一个模板。

这是我的views.py

def homepage(request):
    context = {}
    items = AddInv.objects.all()
    return render(request, "selly/homepage.html", {'items': items})

def item(request, item_id):
    context = {}
    each_item = AddInv.objects.get(pk=item_id)
    return render(request, "selly/item.html", {'each_item':each_item})

这是显示所有对象的模板

<div>
    {% for product in items %}
    <form method="POST" action="/selly/item/{{product.pk}}" item_id="{{product.pk}}">
        {% csrf_token %}
        <td>
            <p><a href="/selly/item/"><img src="{{product.docfile.url}}" class="img-circle" width="150" height="150" align="middle"></img></a></p>
            <br>* Description is : {{product.description}}
            <br>* Price is : {{product.price}}
            <br>* Quantity is : {{product.quantity}}
            <br>* Sold is : {{product.sold}}
            <br>* Total Paypent is : {{product.total_payments}}
            <br>* Item Remaining is : {{product.item_remaining}}
            <p>{{product.id}}</p>
            <br>
            <br>
        </td>
    </form>
    {% endfor %}
</div>

以下是显示已点击对象详细信息的模板

<form method="POST" action="/selly/item/" item_id="{{product.pk}}">
    {% csrf_token %}
    <p><a href="/selly/item/"><img src="{{product.docfile.url}}" class="img-circle" width="150" height="150" align="middle"></img></a></p>
    <p>Description is : {{product.description}}</p>
    <p>Price is : {{product.price}}</p>
    <p>Sold is : {{product.sold}}</p>
    <p>Item Remaining is : {{product.item_remaining}}</p>
    <p>Quantity is : <input type="number" default="0"></p>
    <br>
    <input type="submit" class="btn btn-primary" value="Add to Cart">

</form>

3 个答案:

答案 0 :(得分:0)

如果您需要重定向,则不需要表单,只需为详细信息页面(您已经拥有item())定义一个网址,并设置指向该页面的链接您的列表视图(homepage()):

<div>
    {% for product in items %}
        <td>
            <p><a href="/selly/item/{{ product.pk }}"><img src="{{product.docfile.url}}" class="img-circle" width="150" height="150" align="middle"></img></a></p>
            <br>* Description is : {{product.description}}
            <br>* Price is : {{product.price}}
            <br>* Quantity is : {{product.quantity}}
            <br>* Sold is : {{product.sold}}
            <br>* Total Paypent is : {{product.total_payments}}
            <br>* Item Remaining is : {{product.item_remaining}}
            <p>{{product.id}}</p>
            <br>
            <br>
        </td>
    {% endfor %}
</div>

Django doc有very detailed example你应该遵循。它解释了你应该知道的一切。

答案 1 :(得分:0)

在这种情况下,我不会使用表单(只是链接列表),但这不是问题。

对于每个产品细节,我会定义新的视图功能,如:

def item_detail(request,item_id):
return render(request, "some_template.html")

所以产品细节的模板应该是:

<form method="POST" action="/selly/item_detail/{{each_item.id}}" item_id="{{each_item.id}}">
    {% csrf_token %}
    <p><a href="/selly/item_detail/{{each_item.id}}"><img src="{{product.docfile.url}}" class="img-circle" width="150" height="150" align="middle"></img></a></p>
    <p>Description is : {{product.description}}</p>
    <p>Price is : {{product.price}}</p>
    <p>Sold is : {{product.sold}}</p>
    <p>Item Remaining is : {{product.item_remaining}}</p>
    <p>Quantity is : <input type="number" default="0"></p>
    <br>
    <input type="submit" class="btn btn-primary" value="Add to Cart">

</form>

所以,试试吧。

答案 2 :(得分:0)

使用锚元素和项目详细信息作为href(最佳做法是使用django url标记)。还要确保项目详细信息url允许名为item_id的参数。

<div>
        {% for product in items %}
        <a href="/selly/item/{{product.pk}}">
                <p><a href="/selly/item/"><img src="{{product.docfile.url}}" class="img-circle" width="150" height="150" align="middle"></img></a></p>
                <br>* Description is : {{product.description}}
                <br>* Price is : {{product.price}}
                <br>* Quantity is : {{product.quantity}}
                <br>* Sold is : {{product.sold}}
                <br>* Total Paypent is : {{product.total_payments}}
                <br>* Item Remaining is : {{product.item_remaining}}
                <p>{{product.id}}</p>
                <br>
                <br>
        </a>
        {% endfor %}
    </div>