假设我有一个视图,已经使用user_passes_test
装饰器进行了修饰:
# myapp/views.py
from django.views.generic import TemplateView
from django.contrib.auth.decorators import user_passes_test
def has_perm1_or_perm2(user):
return user.has_perm('myapp.perm1') or user.has_perm('myapp.perm2')
@user_passes_test(has_perm1_or_perm2)
class MyView(TemplateView):
# my view code goes here
我将其与URL连接起来,方法如下:
# myapp/urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
...,
url(r'^myview$', views.MyView.as_view(), name='myview'),
...
]
如果我想在模板中添加到此视图的链接,代码如下所示:
{% url 'view_name' %}
。此处的“view_name”是视图函数的名称。<a href="{% url 'myapp:myview' %}">Check out my view!</a>
但我希望能够在模板中加入一些控制,使得上述内容仅在当前登录用户被指定视图的user_passes_test
函数所批准时才显示。
也就是说,我希望我的模板看起来像这样:
{% if check_user_has_view_permission request.user 'myapp:myview' %}
<a href="{% url 'myapp:myview' %}">Check out my view!</a>
{% else %}
Nothing to see here...
{% endif %}
我该如何实现这一点?
谢谢!
dispatch()
方法。" - solarissmokemethod_decorator
函数并传递了一个name
参数。也就是说,你不能直接用user_passes_test
修饰类。 - solarissmoke