如果我是你,我会做这样的模板:
{% if user == post.author %}
display edit button
{% else %}
display view button or something else
{% endif %}
一个多种变异(如果你想要做的所有的逻辑视图中)是创建一个mixin:
class CanEditMixin(object):
def get_context_data(self, **kwargs):
"""
The method populates Context with can_edit var
"""
# Call the base implementation first to get a context
context = super(CanEditMixin, self).get_context_data(**kwargs)
#Update Context with the can_edit
#Your logic goes here (something like that)
if self.request.user == self.get_object().author
context['can_edit']=True
else:
context['can_edit']=False
return context
然后,你将需要更新您的视图(顺序事项):
class PostDetailView(CanEditMixin, LoginRequiredMixin, DetailView):
#your view
和您的模板:
{% if can_edit %}
display edit button
{% else %}
display view button or something else
{% endif %}
还取决于您的问题的具体细节,您可能会对django object-level permission packages感兴趣。这些软件包允许您为用户添加编辑给定对象的权限。在这种情况下,你可以只写在你的模板类似的东西:
{% if perms.post.can_edit %}
display edit button
{% else %}
display view button or something else
{% endif %}
到django docs的链接。
什么样的一般你想使用,例如在ListView控件,您可以通过用户筛选查询。 – Denis 2013-03-06 10:28:37
感觉这是在视图层次上完成的。你广泛提到“展示”,建议你可以(应该)在视图层次上做到这一点。如果您希望通过该类来完成,请使用根据用户状态返回不同结果的方法来扩展模型,然后始终在视图中调用这些方法(但这对于“连接框”不起作用,例如)。 – Evert 2013-03-06 11:23:15