从django中的模型方法获取request.session
Hay,是否可以从django中的模型方法获取request.session值 大型更新 这是我的模型从django中的模型方法获取request.session,django,model,methods,Django,Model,Methods,Hay,是否可以从django中的模型方法获取request.session值 大型更新 这是我的模型 class GameDiscussion(models.Model): game = models.ForeignKey(Game) message = models.TextField() reply_to = models.ForeignKey('self', related_name='replies', null=True, blank=True) cr
class GameDiscussion(models.Model):
game = models.ForeignKey(Game)
message = models.TextField()
reply_to = models.ForeignKey('self', related_name='replies', null=True, blank=True)
created_on = models.DateTimeField(blank=True, auto_now_add=True)
userUpVotes = models.ManyToManyField(User, blank=True, related_name='threadUpVotes')
userDownVotes = models.ManyToManyField(User, blank=True, related_name='threadDownVotes')
votes = models.IntegerField()
def html(self):
DiscussionTemplate = loader.get_template("inclusions/discussionTemplate")
return DiscussionTemplate.render(Context({
'discussion': self,
'replies': [reply.html() for reply in self.replies.all().order_by('-votes')]
}))
def _find_users_who_have_voted(self):
user_list = []
for user in self.userDownVotes.all():
user_list.append(user.id)
for user in self.userUpVotes.all():
user_list.append(user.id)
return user_list
users_voted = property(_find_users_who_have_voted)
我的观点是这样的
<ul>
{% for discussion in discussions %}
{{ discussion.html }}
{% endfor %}
</ul>
{%用于讨论中的讨论%}
{{discussion.html}
{%endfor%}
模板呢
<li>
<small>
({{ discussion.votes }} votes)
{% if user_id not in discussion.users_voted %}
user not in list!
{% endif %}
</small>
<strong>{{ discussion.message }}</strong>
{% if replies %}
<ul>
{% for reply in replies %}
{{ reply }}
{% endfor %}
</ul>
{% endif %}
({{discussion.voces}}}票)
{%如果用户id不在讨论中。用户投票%}
用户不在列表中!
{%endif%}
{{discussion.message}}
{%if答复%}
{%用于答复中的答复%}
{{回复}
{%endfor%}
{%endif%}
值“user_voted”返回对此讨论进行投票的用户ID列表
我想查看request.session['user'].id值是否在此列表中您可以使用threadlocals中间件访问当前用户及其会话 但请记住: 也许有更好的办法来解决你的问题。也许您想详细说明为什么需要模型级的request.session 更新: 既然您显式地调用了某个方法(可能是从视图调用的),为什么不将
request.user
作为html
方法的参数呢
models.py:
def html(self, user):
your code...
views.py:
yourmodel.html(request.user)
更新您的超级更新:
这正是{%include%}的用途:
在第一个模板中,执行以下操作:
{% for discussion in discussions %}
{% include "discussion.html" }}
{% endfor %}
第二个模板的命名空间中有request.user.id:
{% if request.session.user.id not in discussion.users_voted %}
user not in list!
{% endif %}
为什么不在视图中使用Django的
render_to_string
,这样可以很好地使用请求,并完全避免使用model方法呢
更新:在浏览了mega更新之后,您应该查看Django的,并使用模型中的数据来填充模板,而不是使用模型来呈现模板。将模型和模板分开-Django是一个MVT/MCV框架,理由很充分:)我正在使用模型解析模板,但我需要向它传递上下文。但是,当解析模板时,我无权访问request.session(我正在将request.session值与另一个值进行比较)