2016-12-10 62 views
0

我想使用相同的模板,以查看有关我的每一个数据库对象的信息。我希望能够点击列表中的每个元素,并让它将我链接到一个有关它的信息的页面。我认为有一个更简单的方法比为每个独特的对象制作视图。Django的:从模板传递对象的意见

我列出了所有我的数据库对象在我的list.html这样的:

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

我views.py有这样的观点:

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

我可以通过每个{{ instance.name }}到查看并使用它作为我的过滤器的变量?

回答

2

好第一关从来没有做到这一点:

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

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

data = Object.objects.all() 

其次,我希望object_viewdataobject_infoobject.html是不是你实际变量名称!如果是这样,请确保它们对您的应用程序有意义。

好了回到你的问题。那么,你不需要为每一个对象都做一个视图。我假设<a href="object">...</a>应该引用将填充选定对象的新页面。

如果是这样,你会想要在<a>标签这样的网址:/objects/object_id/

这个新的URL是否需要在urls.py这样定义:

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

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

现在你的原始模板,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/

现在,这意味着你将只需要使用另一个模板创建另一个视图。

你的第二个观点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实例显示特定对象:)的详细信息。

+0

它正在做我想要的东西,谢谢! – tchane