2011-04-30 72 views
1

Django的新手在我的方法中可能完全錯誤。Django:在inclusion_tag中訪問MEDIA_URL?

我有一塊複雜的HTML,可以在我的網站的多個部分中重複使用,但會填充不同的數據。我想把它變成我可以放在任何地方的街區。

我就包含標籤閱讀並這樣定義它:

from django import template 
register = template.Library() 

@register.inclusion_tag('release_widget.html') 
def release_widget(releases): 
    return {'release_list': releases} 

然後當我在模板中使用它:

{% load release_widget %} 
{% release_widget release_list %} 

這工作。我的問題是,在release_widget.html文件中,我無法訪問我的MEDIA_URL變量,該變量定義在哪裏查找我的圖像資產。我認爲這是因爲上下文沒有被傳遞?

我看着takes_context=True參數,但無法弄清楚 - 看起來這不再需要變量,這對我不起作用 - 我需要每次都能夠傳遞不同的字典我包括該塊。

有沒有更好的方法來做到這一點?我甚至應該使用MEDIA_URL?我不能只使用絕對路徑,因爲我的網站結構像site.com/article/something/123,資產位於site.com/assets/,我不想在任何地方都使用../

感謝, 馬特

回答

12

takes_context是正確的路要走。我不知道你爲什麼說它沒有使用變量:它的確如此,它只是將上下文字典作爲附加(初始)參數。所以標籤看起來是這樣的:

@register.inclusion_tag('release_widget.html', takes_context=True) 
def release_widget(context, releases): 
    return {'MEDIA_URL': context['MEDIA_URL'], 'release_list': releases} 
+0

謝謝,我猜fet_context的文檔混淆了我。這很好。 – 2011-04-30 16:15:26

3

你可以在你的模板標籤導入MEDIA_URL並把它傳遞到您的模板:

def release_widget(releases): 
    from django.conf import settings 
    return {'release_list': releases, 
      'MEDIA_URL': settings.MEDIA_URL} 

然後你就可以繼續在模板中使用{{ MEDIA_URL }}