[英]Lists in Django templates not working as expected
如果在配置文件視圖中循環訪問我的用戶組以插入頁面的不同塊,但由於某種原因,它們並不像我期望的那樣等同。 這是模板:
{{ user_groups }}
{% for g in user_groups %}
{{ g }}
{% if g == "client" %}
client things
{% endif %}
{% if g == "guardian" %}
guardian things
{% endif %}
{% endfor %}
{% for group in request.user.groups.all %}
{{ group }}
{% ifequal group "guardian" %}
this is a guardian
{% endifequal %}
{% endfor %}
{% if "guardian" in user_groups %}
Give me some guardian stuff
{% endif %}
輸出:
[<團體:監護人>]監護人監護人
正如你所看到的,我已經用實際的用戶對象和傳遞給context []的列表完成了這個。 在這兩種情況下,列表本身都沒有問題迭代。 兩個循環都顯示原始變量輸出,但是等於操作失敗。
我可以讓它做比較像{% ifequal "something" "something" %}
這將顯示if塊內的內容,但將列表元素與字符串進行比較似乎沒有任何方式我嘗試把它做完。
我知道我不能在if塊中聲明列表,但在任何情況下我都不這樣做。 有關為什么會失敗的任何想法? 我錯過了一些微不足道的事嗎?
使用{{ group }}
隱式地將group
對象轉換為字符串,調用它的__unicode__
或__str__
方法(取決於您的python版本)。 對於用戶組,這很可能會返回包含group.name
值的group.name
。
但是,這種隱式轉換不會發生在if
語句中(並且不應該)。 因此,字符串"guardian"
永遠不能等於組對象guardian
。
我建議將此邏輯放入您的視圖而不是模板中,您可以在其中使用更多功能並進行實際過濾:
def myview(request):
context['is_guardian'] = request.user.groups.filter(name='guardian').exists()
context['is_client'] = request.user.groups.filter(name='client').exists()
return render(request, 'my_template.html', context)
而你的模板:
{% if is_guardian %}
...
{% endif %}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.