我有一个标签,它的变量是一个带有嵌入变量的字符串。有没有更好的方法来评估比:Django标签更好的方法来解决带变量的字符串
{% custom_extends "this_{{is.a.test}}" %}
- 后端
string_with_variable = "this_{{is.a.test}}"
result = Template(string_with_variable).render(context)
这工作,但我不知道是否有任何低级别的功能,做同样的。
我有一个标签,它的变量是一个带有嵌入变量的字符串。有没有更好的方法来评估比:Django标签更好的方法来解决带变量的字符串
{% custom_extends "this_{{is.a.test}}" %}
- 后端
string_with_variable = "this_{{is.a.test}}"
result = Template(string_with_variable).render(context)
这工作,但我不知道是否有任何低级别的功能,做同样的。
答案是否定的。到目前为止,如果你想解析/呈现一个字符串,你需要实例化一个Template
并用你的上下文调用渲染。
result = Template("this_{{is.a.test}}").render(context)
我猜我今天早上有点紧张。问题变得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()
了解核心代码如何执行此操作。
我正在寻找一种更简单的方法来渲染“nick {{my_var}}”在自定义模板中。现在我基本上创建一个模板并渲染它......认为必须有一些方法可以评估一个字符串。 – Nix 2012-02-23 21:52:22
'expr'模板标签就是你想要的。 Django团队决定(不明智地,IMNSHO)创建一个有意限制的模板语言。它不仅在流量控制方面很弱,而且它的“新”变量语法很糟糕。据说这使得“模板设计师”变得更容易,因为他们不必是程序员,但我见过的所有模板都是由Photoshop中的设计师完成的,然后由程序员在Django中实现。 – 2012-02-23 22:01:21
我需要一个服务器端解决方案,我的标签必须是模板中的第一个。所以我正在寻找一种更好的方式,比我上面做的方式,在python中能够评估带嵌入式变量的字符串。 – Nix 2012-02-24 15:38:41
我已经普遍看到人们建议使用字典中的变量名称/值的变量。不知道这是否会在这里工作,但可能是一种可能性。 – Furbeenator 2012-02-23 18:42:31
是的,我有一些做kwargs,但在这种情况下,它通常是一个参数。问题是我只是想渲染字符串... – Nix 2012-02-23 18:46:52