Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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_Templates_Django Class Based Views - Fatal编程技术网

在上下文中传递用户的组名并在django中的模板中访问

在上下文中传递用户的组名并在django中的模板中访问,django,templates,django-class-based-views,Django,Templates,Django Class Based Views,我在django应用程序中使用了基于类的视图的mixin。我还创建了一个名为讲师的组,只允许属于该组的用户具有编辑、添加和删除课程对象的特定权限。 在负责呈现当前用户创建的课程的ManageCourseList视图中,我试图覆盖get\u context\u data方法,以传递一个额外的“group\u list”参数,该参数包含用户所属的组。 我试图在模板ManageCourseList视图中访问它。 问题是,尽管当前用户属于讲师组,但它仍然呈现else条件数据。 请帮助,我的文件: Vie

我在django应用程序中使用了基于类的视图的mixin。我还创建了一个名为讲师的组,只允许属于该组的用户具有编辑、添加和删除课程对象的特定权限。 在负责呈现当前用户创建的课程的ManageCourseList视图中,我试图覆盖get\u context\u data方法,以传递一个额外的“group\u list”参数,该参数包含用户所属的组。 我试图在模板ManageCourseList视图中访问它。 问题是,尽管当前用户属于讲师组,但它仍然呈现else条件数据。 请帮助,我的文件:

Views.py

from django.shortcuts import render
from django.core.urlresolvers import reverse_lazy
from django.views.generic.list import ListView
from django.views.generic.edit import CreateView,UpdateView,DeleteView
from django.contrib.auth.mixins import LoginRequiredMixin,PermissionRequiredMixin

from .models import Course


class OwnerMixin(object):
    def get_queryset(self):
        qs = super(OwnerMixin,self).get_queryset()

        return qs.filter(owner=self.request.user)

class OwnerEditMixin(object):
    def form_valid(self,form):
        form.instance.owner = self.request.user
        return super(OwnerEditMixin, self).form_valid(form)

class OwnerCourseMixin(OwnerMixin,LoginRequiredMixin):
    model = Course
    fields = ['subject','title','slug','overview'] # why use this attribute?
    success_url = reverse_lazy('courses:manage_course_list') # use of it?

class OwnerCourseEditMixin(OwnerCourseMixin,OwnerEditMixin):
    fields = ['subject','title','slug','overview']
    success_url = reverse_lazy('courses:manage_course_list')
    template_name = 'courses/manage/course/form.html'

class ManageCourseListView(OwnerCourseMixin,ListView):
    template_name = 'courses/manage/course/list.html'

    def get_context_data(self, **kwargs):
        context = super(ManageCourseListView,self).get_context_data(**kwargs)
        context['group_list'] = self.request.user.groups.all()
        return context
list.html

{% extends "base.html" %}

{% block title %}My courses{% endblock %}

{% block content %}
    {% if group_list.0 == "Instructors" %}
    <h1>My courses</h1>
        <div class="module">
            {% for course in object_list %}
                <div class="course-info">
                    <h3>{{ course.title }}</h3>
                    <p>
                        <a href="{% url 'courses:course_edit' course.id %}">Edit</a>
                        <a href="{% url 'courses:course_delete' course.id %}">Delete</a>
                    </p>
                </div>
            {% empty %}
                <p>You haven't created any courses yet.</p>
            {% endfor %}
            <p>
                <a href="{% url 'courses:course_create' %}" class="button">Create new course</a>
            </p>
        </div>

    {% else %}
    <h1>No courses to display</h1>
    {% endif %}

{% endblock %}
{%extends“base.html”%}
{%block title%}我的课程{%endblock%}
{%block content%}
{%if group_list.0==“讲师”%}
我的课程
{对象列表%中的课程的百分比}
{{course.title}

{%empty%} 您尚未创建任何课程

{%endfor%}

{%else%} 没有要展示的课程 {%endif%} {%endblock%}
首先,这种方法毫无意义;您只需访问模板中的
user.groups

其次,组中的每个项都是组对象,而不是字符串。所以你的情况永远不会成功;您需要与
group.name
进行比较。此外,还远不能确定讲师是否是第一批

为了解决这个问题,我将重写您的get_context_数据,以添加讲师标志,而不是组列表:

def get_context_data(self, **kwargs):
    context = super(ManageCourseListView,self).get_context_data(**kwargs)
    context['user_is_instructor'] = self.request.user.groups.filter(name='Instructors').exists()
    return context
现在在模板中:

{% if user_is_instructor %}

首先,这种方法毫无意义;您只需访问模板中的
user.groups

其次,组中的每个项都是组对象,而不是字符串。所以你的情况永远不会成功;您需要与
group.name
进行比较。此外,还远不能确定讲师是否是第一批

为了解决这个问题,我将重写您的get_context_数据,以添加讲师标志,而不是组列表:

def get_context_data(self, **kwargs):
    context = super(ManageCourseListView,self).get_context_data(**kwargs)
    context['user_is_instructor'] = self.request.user.groups.filter(name='Instructors').exists()
    return context
现在在模板中:

{% if user_is_instructor %}

我需要在我的项目中的大多数地方使用此组检查,因为我的是基于角色的组检查。是否有一种方法可以让我只做一次,然后在任何地方都使用它,比如上下文处理器,否则在我做这个检查的每个视图中,它会为这个检查提供一个额外的查询。我需要在我的项目中的大多数地方使用这个组检查,因为我的组检查是基于角色的。是否有一种方法,我只做一次,然后在任何地方使用它,比如上下文处理器,否则在我做这个检查的每个视图中,它会为这个检查提供一个额外的查询。