Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.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_Request_Models_Django Custom Tags - Fatal编程技术网

模型属性中的Django用户注入

模型属性中的Django用户注入,django,request,models,django-custom-tags,Django,Request,Models,Django Custom Tags,我在Django有这种型号: News Comments Reactions 关系是: a News has various Comments a Comment has various Reactions 问题是用户(在请求/会话中):用户可能订阅反应或评论;他可能已登录或未登录。(这是一个foo示例,没有太多意义) 我无法在模板中执行以下操作: {% for reaction in this_news.comments.reactions %} {{ reaction.name }}

我在Django有这种型号:

News
Comments
Reactions
关系是:

a News has various Comments
a Comment has various Reactions
问题是用户(在请求/会话中):用户可能订阅反应或评论;他可能已登录或未登录。(这是一个foo示例,没有太多意义)

我无法在模板中执行以下操作:

{% for reaction in this_news.comments.reactions %}
 {{ reaction.name }}
 {% if reaction.user_subscribed %} #reaction.user_subscribed(request.user)...
 You have subscribed this reaction!
 {% endif %}
{% endfor %}
问题是:

  • 我无法使用参数调用模板中的方法(请参见上面的注释)
  • 模型没有访问请求的权限
现在我在
News
模型中调用
init\u user
方法,传递请求。然后我在
Comment
Reaction
模型中使用相同的方法,我必须设置
user\u subscribed
属性,循环每个模型的子级

难道没有更聪明的方法吗

编辑:感谢Ignacio关于使用自定义标记的提示,我正在尝试以通用模式传递给用户(避免使用闭包,因为我不知道如何使用闭包):


当我使用它时,
{%inject\u user object.method\u接收用户请求。user%}
我遇到了这个错误,
'str'对象在
方法\u injected(user)
中不可调用;我怎样才能解决这个问题

编写一个函数,它接受用户并设置一个上下文变量来指示标准的存在或不存在。

我用一种不太优雅的方式解决了这个问题,但它对我有效

我在我的
User
定义的类中创建了一种单例,在我需要的每个视图中都设置了一个属性

属性为
User.current


然后,在模型内部,我需要让当前用户查看
user。当前

它不仅涉及用户订阅的属性,还有许多由用户驱动的行为。。有没有一种通用的方法可以做到这一点?有了自定义标记,我可以在模板中获取一个模型方法并将其传递给用户?你能解释一下或者告诉我如何做吗?最后一句话的文档不清楚(生成标记的闭包)
def inject_user(parser, token):
    try:
        # split_contents() knows not to split quoted strings.
        tag_name, method_injected, user = token.split_contents()
    except ValueError:
        raise template.TemplateSyntaxError("%r tag requires exactly three arguments" % token.contents.split()[0])
    return InjectUserNode(method_injected, user)

class InjectUserNode(template.Node):
    def __init__(self, method_injected, user):
        self.method_injected = template.Variable(method_injected)
        self.user = template.Variable(user)

    def render(self, context):
        try:
            method_injected = self.method_injected.resolve(context)
            user = self.user.resolve(context)
            return method_injected(user)
        except template.VariableDoesNotExist:
            return ''