javascript - Django 中的不同角色 : show different content in web page

标签 javascript python django

我正在使用 Django 开发一个 Web 应用程序,我创建了不同的用户 Angular 色,例如 CunstomerUser、GoodUser、Admin...等。

现在我想在他们登录时向他们展示不同的东西。例如,当他们打开弹出窗口时,CustomerUser 将看到一个用于评论的文本区域字段,而对于Admin,他将看到他可以执行的其他操作。

我发现我们可以在模板级别做到这一点,例如:

{% if request.user.is_superuser %}
.... superuser content
{% else %}
.... non-superuser content
{% endif %}

但是我该如何处理这个模板使用的javascript文件呢?因为我想向他们展示不同的功能取决于他们的 Angular 色。例如,我想确定模板中包含的 example.js 中的 Angular 色:

<html>
<script type="text/javascript" src="example.js"></script>
...
</html>

我找到的当前解决方案是在模板中创建一个变量全局javascript,以便所有javascipt文件都可以使用:

<script>
 var userType = '{{user.get_usertype}}';
</scirpt> 

但是他们是更好的方法吗?我认为全局变量不太好用...也许我使用了转储模式设计。有任何想法吗?谢谢!

最佳答案

我可能是错的,但你仍然可以在 javascript 中使用 django 模板语法,因为 django 模板是在页面加载之前评估的,因此它仍然可以通过隐藏/显示与特定用户相关的部分来工作:

<script>
{% if request.user.is_superuser %}
    var userType = 'superuser';
{% else %}
    var userType = 'normaluser';
{% endif %}
</script>

上面的代码块不必是全局的,它可以发生在模板文件中的任何位置。在这种情况下,您始终只会获得 userType 的一个定义。

编辑:

嗯,避免全局变量的目的是因为它们可能会被其他函数更改,因此值可能会困惑。但是,如果您定义伪常量,那么应该没问题。

Javascript 没有常量,但您可以使用任何带有 id 的 html 来实现:

html:

<p style="display: none;" class="identity" id="{% if request.user.is_superuser %}superuser{% else %}normaluser{% endif %}"></p>

示例.js:

var user_role = $('p.identity').attr('id');

需要注意的是,您需要在模板末尾加载 example.js ,否则它将在 html 加载之前加载,从而找不到该元素。

关于javascript - Django 中的不同角色 : show different content in web page,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38527159/

相关文章:

javascript - 每行的折叠按钮

python - 我可以使用 Django 来防止直接访问图像文件吗?

python docker 抛出错误 : AttributeError: module 'six' has no attribute 'PY34'

python - Django CSV 导入 - 使用 æ、ø、å(丹麦语字符)和空格时仅导入第一个数据行

javascript - 正则表达式匹配管道分隔字符串最后五个单词中的给定单词

javascript - 在javascript函数中传递二维数组

javascript - RGraph 折线图上特定点的不同颜色

python - 将 python 2.7 timedelta.total_seconds() 转换为 python 2.6 中的等效项

python - 如何使用 Celery 从另一台服务器运行任务?

django - 如何在 django 中以一种形式更新两个模型?