Django自定义标记交互
我定义了一个自定义标记Django自定义标记交互,django,django-templates,Django,Django Templates,我定义了一个自定义标记{%get_user user_id%},它捕获用户的id并通过变量user_obj返回用户对象:{user_obj.email}、{{user_obj.name}、{{{user_obj.photo.url}等等 而且效果很好。接下来我定义了标记{%get\u user\u items user%},它获取用户对象并通过变量user\u photo:{{user\u photo}返回用户的照片url 我想在这两个自定义标记之间进行交互。它的意思是: {% load use
{%get_user user_id%}
,它捕获用户的id并通过变量user_obj返回用户对象:{user_obj.email}、{{user_obj.name}、{{{user_obj.photo.url}
等等
而且效果很好。接下来我定义了标记{%get\u user\u items user%}
,它获取用户对象并通过变量user\u photo:{{user\u photo}
返回用户的照片url
我想在这两个自定义标记之间进行交互。它的意思是:
{% load user_tags %}
{% get_user 1 %}
{{ user_obj }} // returns unicode string as expected
{% get_user_items user_obj %}
{{ user_photo }}
据我所知,标记“get_user_items”必须通过变量user_obj获取用户对象,但否-它从变量user_obj获取通常的字符串“user_obj”,而不是object强>
如何解决这个问题?我做错了什么???如何将变量{{user\u obj}}
中的值直接传输到标记{%get\u user\u items%}
谢谢你提前回答 必须使用上下文将字符串解析为变量。见关于的讨论 这是文档中的示例。必须首先使用
template.variable
将该值标记为变量。它的参数是保存变量名的参数。在本例中,这是date\u to\u be\u formatted
。这将保存为节点上的实例变量,以便稍后在render
方法中使用
然后,在render方法中,尝试从上下文解析变量(
render
可以访问上下文,这就是为什么在这里执行此操作)。这是通过对在\uuuu init\uuuu
方法中创建的实例变量调用resolve
,并将上下文作为参数传递给它来实现的。变量可能无法解析,这就是为什么它需要在try…中,除了块。以及如何解析(用几个词)?换句话说,TL;博士,我已经更新了我的答案,指出了相关的部分,并大致解释了发生了什么,但在某一点上,你只需要深入到文档中,或者放弃,然后回家。是的,这正是我想要的!非常感谢这么简单的例子。
class FormatTimeNode(template.Node):
def __init__(self, date_to_be_formatted, format_string):
self.date_to_be_formatted = template.Variable(date_to_be_formatted)
self.format_string = format_string
def render(self, context):
try:
actual_date = self.date_to_be_formatted.resolve(context)
return actual_date.strftime(self.format_string)
except template.VariableDoesNotExist:
return ''