2012-02-23 16 views
2

我有一个标签,它的变量是一个带有嵌入变量的字符串。有没有更好的方法来评估比:Django标签更好的方法来解决带变量的字符串

{% custom_extends "this_{{is.a.test}}" %} 

- 后端

string_with_variable = "this_{{is.a.test}}" 
result = Template(string_with_variable).render(context) 

这工作,但我不知道是否有任何低级别的功能,做同样的。

+0

我已经普遍看到人们建议使用字典中的变量名称/值的变量。不知道这是否会在这里工作,但可能是一种可能性。 – Furbeenator 2012-02-23 18:42:31

+0

是的,我有一些做kwargs,但在这种情况下,它通常是一个参数。问题是我只是想渲染字符串... – Nix 2012-02-23 18:46:52

回答

0

答案是否定的。到目前为止,如果你想解析/呈现一个字符串,你需要实例化一个Template并用你的上下文调用渲染。

result = Template("this_{{is.a.test}}").render(context) 
1

我猜我今天早上有点紧张。问题变得some_custom接受一个嵌入变量引用的参数吗?还是你想让参数some_custom在它通过之前得到解决(这是一个更一般的情况)?

如果是后者的情况,请检查Expr templatetag。这样,您可以这样做:

{% expr "this_"+is.a.test as some_string %} 
{% some_custom some_string param %} 

更新评论:

由于这是{% extends %},正如你正确地指出,需要将文件中的第一行,只需在您的视图中设置一个变量,例如my_custom_template = "this_"+is.a.test+".html"并将其与上下文一起传递。然后在你的模板中,你可以说{% custom_extends my_custom_template %},你很好走。

当然,这里假定你的custom_extends标签的分辨率与标准的extends标签一样可变,但是这对你的代码很容易。请参阅django/template/loader_tags.py,ExtendsNode.get_parent()了解核心代码如何执行此操作。

+0

我正在寻找一种更简单的方法来渲染“nick {{my_var}}”在自定义模板中。现在我基本上创建一个模板并渲染它......认为必须有一些方法可以评估一个字符串。 – Nix 2012-02-23 21:52:22

+0

'expr'模板标签就是你想要的。 Django团队决定(不明智地,IMNSHO)创建一个有意限制的模板语言。它不仅在流量控制方面很弱,而且它的“新”变量语法很糟糕。据说这使得“模板设计师”变得更容易,因为他们不必是程序员,但我见过的所有模板都是由Photoshop中的设计师完成的,然后由程序员在Django中实现。 – 2012-02-23 22:01:21

+0

我需要一个服务器端解决方案,我的标签必须是模板中的第一个。所以我正在寻找一种更好的方式,比我上面做的方式,在python中能够评估带嵌入式变量的字符串。 – Nix 2012-02-24 15:38:41

相关问题