2016-12-10 41 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