我拉着动态内容(从数据库)为模板。 你可以认为这是一些简单的CMS系统。 内容字符串包含模板变量。 像这样的(简化的情况下):
vars['current_city'] = "London"
vars['content'] = 'the current city is: {{current_city}}' #this string comes from db
return render_template(request, 'about_me.html',vars)
然后在模板:
{{content}}
输出明显:
目前的城市是:{{current_city}}
预期:
目前的城市是:伦敦
我的问题 - 有什么办法来呈现另一个变量中一个变量名? 使用自定义模板标签/过滤器似乎是个好主意,但我试图创建一个没有成功...任何想法这可怎么解决呢?
有一个自定义标签或许可以解决这个问题,但它可能会有点复杂,因为再有就是具有模板内的完整的模板,因为没有从节约您的所有模板数据库(其中可能包括其他的模板标签限制您的可能性)。 我认为,最简单的方法是手动呈现来自数据库的模板字符串,然后传递可变的主模板。
from django.template import Template, Context
...
context = {
'current_city': 'London'
}
db_template = Template('the current city is: {{current_city}}') # get from db
context['content'] = db_template.render(Context(context))
return render_template(request, 'about_me.html', context)
注意:
如果你沿着这条路,这可能不是非常有效的,因为每一次你将执行视图,数据库模板将不得不进行编译。 所以,那么你可能想缓存分贝的编译版本,然后只需通过适当的上下文它。 以下是非常简单的缓存:
simple_cache = {}
def fooview(request):
context = {
'current_city': 'London'
}
db_template_string = 'the current city is: {{current_city}}'
if simple_cache.has_key(db_template_string):
db_template = simple_cache.get(db_template_string)
else:
simple_cache[db_template_string] = Template(db_template_string)
context['content'] = db_template.render(Context(context))
return render_template(request, 'about_me.html', context)