이 글에서는 주로 Django 템플릿에서 perms 변수를 사용할 수 없는 문제를 해결하는 방법을 소개합니다. 이 글은 모든 사람의 공부나 업무에 확실한 참고 자료이자 학습 가치가 있습니다. 필요하신 분은 아래를 따라가서 함께 배워보세요.
머리말
이 글은 주로 Django 템플릿에서 perms 변수를 사용할 수 없는 문제에 대한 해결책을 소개하고 참고 및 학습을 위해 공유합니다. 아래에서는 자세히 설명하지 않겠습니다. 자세한 소개.
해결책:
먼저 Django에 내장된 권한 관리 시스템을 사용할 때 settings.py 파일을 추가해야 합니다.
INSTALLED_APPS添加: 'django.contrib.auth', MIDDLEWARE添加: 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.context_processors.auth', TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.i18n', 'django.template.context_processors.media', 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.contrib.messages.context_processors.messages', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', ], }, }, ]
템플릿에서 권한을 확인하는 방법은 무엇인가요?
공식 웹사이트 지침 https://docs.djangoproject.com/en/1.11/topics/auth/default/#permissions에 따르면 로그인한 사용자 권한은 {{ perms } 템플릿에 저장됩니다. }
변수는 권한 템플릿 프록시 django.contrib.auth.context_processors.PermWrapper
의 인스턴스입니다. 자세한 내용은 django/contrib/auth/context_processors.py 소스 코드를 참조하세요. {{ perms }}
变量中,是权限模板代理django.contrib.auth.context_processors.PermWrapper
的一个实例,具体可以查看django/contrib/auth/context_processors.py源码
测试用例:
测试过程中,发现{{ perms }}
变量压根不存在,没有任何输出;好吧,只能取Debug Django的源码了
def auth(request): """ Returns context variables required by apps that use Django's authentication system. If there is no 'user' attribute in the request, uses AnonymousUser (from django.contrib.auth). """ if hasattr(request, 'user'): user = request.user else: from django.contrib.auth.models import AnonymousUser user = AnonymousUser() print(user, PermWrapper(user), '-----------------------') return { 'user': user, 'perms': PermWrapper(user), }
测试访问接口,发现有的接口有打印权限信息,有的没有,似乎恍然醒悟
可以打印权限信息的接口返回:
return render(request, 'fms/fms_add.html', {'request': request, 'form': form, 'error': error})
不能打印权限新的接口返回:
return render_to_response( 'fms/fms.html', data)
render和render_to_response区别
render是比render_to_reponse更便捷渲染模板的方法,会自动使用RequestContext,而后者需要手动添加:
return render_to_response(request, 'fms/fms_add.html', {'request': request, 'form': form, 'error': error},context_instance=RequestContext(request))
其中RequestContext是django.template.Context
的子类.接受request
和context_processors
,从而将上下文填充渲染到模板问题已经很明确,由于使用了render_to_response
方法,没有手动添加context_instance=RequestContext(request)
导致模板不能使用{{ perms }}
🎜🎜테스트 과정에서 {{ perms }}
변수가 전혀 존재하지 않고 출력도 없는 것으로 나타났습니다. 음, 소스 코드만 얻을 수 있습니다. Debug Django🎜🎜🎜🎜rrreee🎜액세스 인터페이스를 테스트한 결과 일부 인터페이스에서 권한 정보가 인쇄되고 일부는 그렇지 않은 것이 갑자기 깨어나는 것 같습니다.🎜🎜권한 정보를 인쇄할 수 있는 인터페이스가 다음과 같이 반환됩니다. 🎜🎜🎜🎜🎜rrreee🎜 권한을 인쇄할 수 없는 새 인터페이스는 다음을 반환합니다. 🎜🎜rrreee🎜🎜🎜 render와 render_to_response🎜🎜의 차이점 🎜🎜🎜render는 render_to_reponse보다 템플릿을 렌더링하는 더 편리한 방법이지만 후자는 자동으로 RequestContext를 사용합니다. 수동으로 추가해야 합니다: 🎜🎜🎜🎜rrreee🎜여기서 RequestContext는 django.template.Context
의 하위 클래스입니다. request
및 context_processors
를 수락합니다. 따라서 컨텍스트를 채우고 이를 템플릿에 렌더링하는 문제는 이미 명확해졌습니다. render_to_response
메서드를 사용했기 때문에 context_instance=RequestContext(request)로 인해 템플릿이 <code>{{ perms }}
변수를 사용할 수 없게 됩니다🎜
위 내용은 Django 템플릿에서 perms 변수를 사용할 수 없는 문제에 대한 해결 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!