2010-11-11 62 views
1

我正在爲Django編寫一個簡單的類似博客的應用程序,並且試圖獲得將帖子限制爲5的首頁的效果,並且具有列出類似100個帖子的全面存檔一次。 (100是不現實的,只是拋出一個數字)在Django模板中渲染外部定義的塊

由於博客帖子塊看起來兩個頁面之間完全相同減去顯示的數字,我想把相應的HTML放在一個單獨的模板我可以包含或鏈接到正在渲染的實際模板。我查看了文檔,include標籤看起來很有希望,但它顯然呈現在當前上下文之外,這對我的原因沒有幫助,因爲它不會讓對象循環播放。除此之外,我看不到任何其他方式去做我想做的事。這是可能的還是我只是運氣不好,並將不得不違反DRY?代碼如下,讓你知道我想要什麼。

感謝

####################### 
# news/frontpage.html # 
####################### 
{% extends "news/base.html" %} 

{% block site_title %} - Front Page{% endblock %} 

{% block center_col %} 
{{ block.super }} 
    <a href="/news/">View Older Blog Posts</a> 
{% endblock %} 

{% block blog_rows %} 
{% for object in object_list %} 
    # Blog post content would go here, however it is to be included. 
{% endfor %} 
{% endblock %} 

回答

2

你正在尋找一個inclusion tag

+0

看起來像我想要的,但我希望有一個更優雅的方式來做到這一點......謝謝! – SPoage 2010-11-11 09:07:53

0

爲什麼不過濾想要在視圖中顯示的博客文章?這樣,你可以保持模板相同:

{% for object in blogposts %} 
# ... 
{% endfor %} 

你在你看來,這無論是包括5名或100個職位定義的相關博客文章。

0

伊格納西奧是正確的,你想要一個包含標籤,但你應該知道,include標籤不呈現當前環境之外 - 這十分肯定地使用相同的情況下,因爲它是在塊

你問題可能是您正嘗試撥打object_list上的blogpost_set - 但這種關係與列表中的對象不同,它與列表中的每個單獨對象都有關係。你需要遍歷每一個object_list,然後通過blogpost_set.all

+0

這是一個錯字,我實際上已經修復了它,但是會調用{%include%}來做我想要的,或者我還想要編寫一個包含標記嗎? – SPoage 2010-11-11 09:09:39