它在錫說什麼:我希望能夠訪問或者:如何訪問Django模板標籤中的視圖函數?
- 視圖功能本身
- 視圖名稱(雖然這是用處不大,我也許可以用它來找回功能)視圖函數的
- 屬性
這需要從一個模板標籤內訪問。
總之,我想要做的是標記視圖函數的信息,可以使用我的基本模板來配置一些視圖取景UI;例如設置標題或填充通用幫助對象。如果有人可以建議更好的方法來做到這一點,請隨時提供該答案。
它在錫說什麼:我希望能夠訪問或者:如何訪問Django模板標籤中的視圖函數?
這需要從一個模板標籤內訪問。
總之,我想要做的是標記視圖函數的信息,可以使用我的基本模板來配置一些視圖取景UI;例如設置標題或填充通用幫助對象。如果有人可以建議更好的方法來做到這一點,請隨時提供該答案。
這就是模板上下文字典包含的內容。它應該包含「標題,例如,或填充通用幫助對象。」
def myViewFunction(request):
# whatever
return render_to_response(template,
{ 'title': "Title of this view's page",
'help': someHelpObject, },
'name': 'myViewFunction',
'attribute': 'some attribute of myViewFunction',
)
視圖函數在Django中沒有任何特殊的狀態。
模板可以在任何地方渲染:在視圖中,在模板標籤內,在模型方法中,在實用函數中......所以它甚至不清楚你想要訪問什麼。但無論如何,總的原則是,如果你想訪問模板中的某些東西,你應該將它傳遞給模板上下文。
是的,當你第一次實現Django時,你有時必須改變你對你的設計的看法,特別是當你來自PHP,ColdFusion或其他基於標籤的語言,其中很多功能來自從模板內。
簡而言之:不要試圖在django模板內實現任何複雜的編程邏輯。如果/ then/else和loops幾乎是你應該嘗試直接在模板中完成的複雜程度。
基本上有3種方式在模板中以編程產生輸出:
context
)發送它們。一個簡單的(儘管較少歧視)選項只是發送locals()
,它將通過函數中創建的每個變量(以及參數)發送。Author
型號創建了功能most_recent_posts
,則可以使用{% for post in author.most_recent_posts %}
你的目的,例如在頁面上創建一個「幫助對象」,你可能有興趣在一個特殊的被稱爲inclusion tag自定義標籤的。您將它稱爲正常自定義標記:{% show_help obj %}
,並且您創建了一個旨在輸出該對象數據的模板。例如,假設您想實現一個上下文相關的幫助系統,並且您只是希望它從數據庫中提取幫助對象並輸出它們。你會正是如此創建一個標籤:
from help.models import Help
@register.inclusion_tag('/help/help.html')
def show_help(topic):
help = Help.objects.get(topic__iexact=topic)
return {
'help': help
}
然後你就會有一個模板,用於輸出幫助內容:
# /help/templates/help/help.html
<div class="help-widget">
<h2>{{ help.title }}</h2>
<p>{{ help.content }}</p>
</div>
在模板中,你會叫這個包含標籤:
<form><fieldset>Delete Project</fieldset>
...
{% show_help "Deleting Project" %}
</form>
如果你需要傳遞每次重複的上下文,並且每次寫入視圖時都要在視圖的上下文中提及。
它可以通過使用context_processors以更好的方式完成。該鏈接將爲您提供所需信息的其餘部分。如果有任何疑問,請隨時溝通。
這裏唯一棘手的部分是模板的性質;有問題的幫助鏈接將在基礎模板中進行,因此我需要傳遞視圖的名稱。把它放在幾十個觀點的背景下是對屁股的痛苦;在我看來,這樣做肯定有更好的方法。 – 2011-02-03 23:33:17