正規表現を伴うだろう。私はそれほどうまくいかない、私は例を書いたが、あなた(または他の誰か)がこれを行うより効率的な方法を持っている(私が保証する)だろう。しかし、これは単なる例です。
from django.template import Library, Node, TemplateSyntaxError
from django.template import Template, Context
register = Library()
class TemplateEvalNode(Node):
def __init__(self, value):
self.value = Variable(value)
def render(self, context):
value = self.value.resolve(context)
regex = re.compile('{% \w+ %}')
# Grab the template tag (eg. {% TemplateTag %})
unevaluated_var = regex.search(value)
if unevaluated_var == None:
return value
# Create a template containing only the template tag
t = Template(unevaluated_var)
# Evaluate that template (with context)
return_var = t.render(Context(context))
# Return the original value with the template tag replaced with
# its actual value
return value.replace(unevaluated_var, return_var)
def template_eval(parser, token):
bits = token.contents.split()
if len(bits) != 2:
raise TemplateSyntaxError, "template_eval takes exactly one argument"
return TemplateEvalNode(bits[1])
template_eval = register.tag(template_eval)
私はまだこれをテストしていませんので、まっすぐオフに動作しないかもしれないが、理論的にはあなたが実行することができます:
{% template_eval object.textfield %}
をそして、それは返します:
a text with a VALUE_OF_TEMPLATETAG.
これを今すぐテストして問題を解決しようとしていますので、バッテリーが切れそうになりましたので、今すぐテストしています。
また、私よりもPythonで優れている人からはるかに巧妙な解決策を期待しています:p。
編集:OK、私は遅すぎました、あなたは私を打つ!
お返事ありがとうございます。迅速に対応して申し訳ありません;-) –