tch*_*ane 1 django django-templates django-views
我想使用相同的模板来查看有关每个数据库对象的信息。我希望能够单击列表中的每个元素,并将其链接到包含有关此信息的页面。我想有一种比为每个唯一对象制作视图更简单的方法。
我在我的list.html上列出了所有数据库对象,如下所示:
{% for instance in object_info %}
<li><a href="object">{{ instance.name }}</a></li>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
我的views.py具有以下观点:
def object_view(request):
data = Object.objects.filter(name="")
context={
'object_info':data
}
return render(request, "object.html", context)
Run Code Online (Sandbox Code Playgroud)
我可以将每个{{ instance.name }}视图传递给视图,并将其用作过滤器的变量吗?
好吧,首先不要做这个:
data = Object.objects.filter(name="")
Run Code Online (Sandbox Code Playgroud)
Django有一个all()将返回所有对象的函数:
data = Object.objects.all()
Run Code Online (Sandbox Code Playgroud)
其次,我希望object_view,data,object_info,object.html是不是你的实际变量名!如果是这样,请确保它们对您的应用程序有意义。
好,回到您的问题。好了,您不需要为每个对象都创建一个视图。我假设<a href="object">...</a>应该引用一个新页面,该页面将填充所选对象。
如果是这样,您可能希望在<a>标签中添加网址,例如:/objects/object_id/。
这个新的网址需要像这样在中定义urls.py:
urlpatterns += [
url(r'^objects/(?P<oid>[0-9]+)/$', views.object_specific_view, name='objects'),
]
Run Code Online (Sandbox Code Playgroud)
注意oidurl参数。我们将使用它来访问我们的特定对象。
现在,您的原始模板list.html看起来应该像这样:
{% for instance in object_info %}
<li><a href="{% url 'objects' oid = instance.id %}">instance.name</a></li>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
在这里我们提供instance.id给oidURL参数生成类似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)
Run Code Online (Sandbox Code Playgroud)
现在,您只需要设计您specific_object.html的object实例并访问实例即可显示特定对象的详细信息:)。
| 归档时间: |
|
| 查看次数: |
5371 次 |
| 最近记录: |