Django:访问包含标签内的MEDIA_URL?

Mat*_*ews 1 django

Django的新手在我的方法论中可能是完全错误的.

我有一块复杂的HTML,我在我的网站的几个部分重用,但填充了不同的数据.我想把它变成一个可以放在任何地方的块.

我读了包含标签并将其定义如下:

from django import template
register = template.Library()

@register.inclusion_tag('release_widget.html')
def release_widget(releases):
    return {'release_list': releases}   
Run Code Online (Sandbox Code Playgroud)

然后当我在我的模板中使用它时:

{% load release_widget %}
{% release_widget release_list %}
Run Code Online (Sandbox Code Playgroud)

这有效.我的问题是,在release_widget.html文件中,我失去了对我的MEDIA_URL变量的访问权限,该变量定义了在哪里可以找到我的图像资源.我认为这是因为上下文没有通过?

我查看了takes_context=True参数,但无法弄明白 - 看起来这不再需要变量,这对我不起作用 - 我需要能够在每次包含块时传递不同的字典.

有没有更好的方法呢?我甚至可以使用MEDIA_URL吗?我不能只使用绝对路径,因为我的网站结构就像site.com/article/something/123,资产在site.com/assets/,我不想../到处都是.

谢谢,马特

Dan*_*man 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}   
Run Code Online (Sandbox Code Playgroud)