【问题标题】:Select different stylesheet according to user in Django template在 Django 模板中根据用户选择不同的样式表
【发布时间】:2015-05-29 01:02:48
【问题描述】:

我希望 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 ...”部分。我认为问题很明显,但我看不到。

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

编辑:修复了空间问题,但我仍然没有得到预期的行为。似乎没有正确比较字符串(如果两者都不起作用) 现在我在做:

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

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

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

【问题讨论】:

    标签: python css django django-templates


    【解决方案1】:

    您的 'user.get_username' 不是字符串,而是将结果字符串化的对象。改为使用 {% if user.get_username|stringformat:"s" == "user1" %} 进行正确比较。

    【讨论】:

    • 我不知道字符串格式,它可能在某些时候有用。
    【解决方案2】:

    删除{% 之间的空格。还要更改if 标签:

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

    【讨论】:

    • 你也可以使用内置的“ifequal”和“ifnotequal”标签来比较
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多