2015-03-25 13 views
0

我希望Django(v 1.6)根據加載頁面的用戶加載不同的樣式表。我已經試過這樣的事情沒有成功:根據用戶在Django模板中選擇不同的樣式表

<!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 %} 

所以它加載樣式表而不是基於用戶名,如果我可以看到「{%。 ..「 部分。我認爲問題很明顯,但我看不到它。

是否有其他方式爲每個用戶加載不同的樣式表?當我使用擴展時,解決方案也必須工作。

編輯:修正了空間問題,但我仍然沒有得到預期的行爲。這似乎是字符串未正確進行比較(ifequal不工作既不) 現在我做:

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

,輸出是一個警告說USER1不同。 (與get_username和ifequal結果相同)

最後:刪除「{{}}」並開始工作。

回答

2

刪除{%之間的空格。也改變了if標籤:

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

你也可以使用內建的「ifequal」和「ifnotequal」標記來比較 – 2015-03-25 11:28:54

+0

明白了。它的工作,謝謝 – 2015-03-25 11:50:41

1

你 'user.get_username' 不是字符串而是stringifies的result.Instead使用的對象,{%如果user.get_username |的StringFormat: 「S」 ==「 user1「%}以進行正確的比較。

+0

我不知道字符串格式,它可能在某些時候是有用的。 – 2015-03-25 12:00:21

相關問題