在我的django网站上,我有像“项目列表”这样的页面。和' project_detail'。每个项目都有不同角色的成员(开发人员,经理,e.t.c。)。我想显示不同的按钮,具体取决于当前用户在模板中的项目中的角色。我需要想法如何实现它。让我们在模板中说出类似的内容:
{%if request.user.role_in_the_current_project =' manager' %} SOW SOMETHING {%endif%}
models.py
class Project(models.Model):
name = models.CharField(max_length=250,)
slug = models.SlugField(max_length=250, unique_for_date='publication_date',)
*Other fields*
def get_absolute_url(self):
return reverse('project:project_detail', args=[self.slug])
class Membership (models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
project = models.ForeignKey(Project, on_delete=models.CASCADE)
ROLE_CHOICES = (
('manager', 'Manager'),
('developer', 'Developer'),
('business_analyst', 'Business analyst'),
('system_analysts', 'System analysts'),
)
role = models.CharField(max_length=20, choices=ROLE_CHOICES,)
view.py
def project_detail(request, slug):
project = get_object_or_404(Project, slug=slug, status='public')
return render(request, 'project/project_detail.html', {'project': project,})
project_detail.html
{% block content %}
<h1>{{ project.name }}</h1>
<p>{{ project.description|linebreaks }}</p>
{%endblock %}
urls.py
urlpatterns = [
url(r'^project/(?P<slug>[-\w]+)/$', project_detail, name='project_detail'),
]
答案 0 :(得分:0)
您可以在模型字段中使用choices
的概念,然后使用这些概念,您可以在模板(或视图)中做出决策,以显示适当的内容。
如果您需要更多相关信息,请与我们联系。
[编辑]:所以,你想要的是每次检查role
的值。正确?
在views.py
写:
project = get_object_or_404(Project, slug=slug, status='public')
memberships = project.membership_set.all()
然后,因为一个项目可以包含许多Membership
条记录,您应该遍历memberships
,以便每次都获得role
。
所以,在你的模板中:
{% for membership in memberships %}
{% if membership.role == 'Manager' %} Do stuff here {% endif %}
{% endfor %}
请注意,.role
将返回大写的ROLE_CHOICES
子元组的第二个值,而第一个值将在用户显示的情况下使用函数{{ 3}}
答案 1 :(得分:0)
好吧,毕竟我发现了呕吐。在视图中我添加:
is_manager = project.membership_set.filter(user=request.user, role='Manager').exists()
然后在模板中添加:
{% if is_manager %}
<button>Create</button>
{% endif %}