gpt4 book ai didi

Django:将对象从模板传递到 View

转载 作者:行者123 更新时间:2023-12-05 01:01:41 24 4
gpt4 key购买 nike

我想使用相同的模板来查看有关我的每个数据库对象的信息。我希望能够单击列表中的每个元素并将其链接到包含有关它的信息的页面。我认为有一种比为每个唯一对象创建 View 更简单的方法。

我在 list.html 中列出了我的所有数据库对象,如下所示:

{% for instance in object_info %}
<li><a href="object">{{ instance.name }}</a></li>
{% endfor %}

我的views.py有这个 View :

def object_view(request):
data = Object.objects.filter(name="")
context={
'object_info':data
}
return render(request, "object.html", context)

我可以将每个 {{ instance.name }} 传递给 View 并将其用作过滤器的变量吗?

最佳答案

好的,首先永远不要这样做:

data = Object.objects.filter(name="")

Django 有一个 all()将返回所有对象的函数:

data = Object.objects.all()

其次,希望object_view , data , object_info , object.html不是你的实际变量名!如果是这样,请确保它们对您的应用有意义。

好的,回到你的问题。好吧,您不需要为每个对象创建一个 View 。我假设 <a href="object">...</a>应该引用一个将填充所选对象的新页面。

如果是这样,您可能希望在 <a> 中包含 URL。像这样的标签:/objects/object_id/ .

这个新的 url 需要在 urls.py 中这样定义:

urlpatterns += [
url(r'^objects/(?P<oid>[0-9]+)/$', views.object_specific_view, name='objects'),
]

注意 oid网址参数。我们将使用它来访问我们的特定对象。

现在是您的原始模板,list.html , 应该是这样的:

    {% for instance in object_info %}
<li><a href="{% url 'objects' oid = instance.id %}">instance.name</a></li>
{% endfor %}

我们在哪里提供 instance.idoid url 参数产生类似 objects/1/objects/2/等等

现在,这意味着您只需使用另一个模板再创建一个 View 。

您的第二个 View object_specific_view :

def object_specific_view(request, oid): # The url argument oid is automatically supplied by Django as we defined it carefully in our urls.py
object = Object.objects.filter(id=oid).first()
context={
'object':object
}
return render(request, "specific_object.html", context)

现在您只需设计您的specific_object.html并访问 object实例来显示特定对象的详细信息:)。

关于Django:将对象从模板传递到 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41080955/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com