模型属性中的Django用户注入
我在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 }}
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 ''