Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django自定义标记交互_Django_Django Templates - Fatal编程技术网

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 ''