我想创建一个自定义包含标记(例如{% smart_include something %}
),它会实现我们想要包含的内容,然后调用常规{% include %}
标记。这应该是这样的:
@register.simple_tag
def smart_include(something):
if something == "post":
template_name = "post.html"
return regular_include_tag(template_name)
有没有办法在python代码中使用{% include %}
标签,以及具体如何?
UPD。退出,解决此问题的最佳方法就是使用render_to_string
快捷方式
答案 0 :(得分:0)
如果你查看 django.template.loader_tags ,你会找到一个函数 do_include ,它基本上是我们使用{%include%}时调用的函数。
所以你应该能够导入它在python中调用函数本身。
我没试过这个,但我认为它应该可行
答案 1 :(得分:0)
我认为你没有做的原因是:
{% if foo %}
{% include 'hello.html' %}
{% endif %}
如果something
是固定号码,您可以使用inclusion tags。在您的模板而不是{% smart_tag something %}
中,您有{% something %}
,那么您的标记库如下所示:
@register.inclusion_tag('post.html')
def something():
return {} # return an empty dict
最后,您可以复制include标记的功能。此代码段应指向正确的方向:
filepath = '/full/path/to/your/template/%s' % something
try:
fp = open(filepath, 'r')
output = fp.read()
fp.close()
except IOError:
output = ''
try:
t = Template(output, name=filepath)
return t.render(context)
except TemplateSyntaxError, e:
return '' # Fail silently.
return output