在Django模板中根据用户选择不同的样式表

时间:2015-03-25 11:24:21

标签: python css django django-templates

我希望Django(v 1.6)根据加载页面的用户加载不同的样式表。我尝试过这样的事情没有成功:

<!DOCTYPE html>

<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Title.</title>
        { % if "{{user.get_username}}" == "user1" %}
            <link href="{% static 'myapp/css/user1_stle.css' %}" rel="stylesheet" media="screen">
        { % endif %}
    <head>
    ...

Django在源代码中呈现:

    <title>Title.</title>
    { % if "user1" == "user1" %}
        <link href="/myapp/css/user1_stle.css" rel="stylesheet" media="screen">
    { % endif %}

所以它加载样式表但不是基于用户名,我可以看到“{%if ...”部分。我认为问题很明显,但我看不出来。

有没有其他方法可以为每个用户加载不同的样式表?当我使用扩展时,解决方案必须工作。

编辑:修复了空间问题,但我仍然没有得到预期的行为。看起来字符串没有被正确比较(ifequal not not are not both) 现在我在做:

{% if "{{user.username}}" == "user1" %}
    <script> alert("{{user.username}}");</script>
{% else %}
    <script> alert("{{user.get_username}}" + " different");</script>
{% endif %}

输出是一个警告,说user1不同。 (与get_username和ifequal相同的结果)

最后:删除了“{{}}”并开始工作。

2 个答案:

答案 0 :(得分:2)

删除{%之间的空格。同时更改if代码:

{% if user.get_username == "user1" %}
    <link href="{% static 'myapp/css/user1_stle.css' %}" rel="stylesheet" media="screen">
{% endif %}

答案 1 :(得分:1)

你的'user.get_username'不是一个字符串,而是一个字符串化结果的对象.Indtead use,{%if user.get_username | stringformat:“s”==“user1”%}进行正确比较。