2017-10-18 25 views
0

我已經看到,使用firstofas後,列表數據類型不保留其結構。例如:第一次使用列表變量

{% firstof some_list some_string as value %} 

如果some_list上面是一個有效的列表,它被分配到value。但是,如果我執行類似{% if pk in value %}的操作,則會失敗,即使它以{% if pk in some_list %}成功。當我打印兩者:

{{some_list}} 
{{value}} 

他們給出相同的輸出,但我認爲名單可能不會使用firstofas後的列表存儲。思考?

回答

1

指定some_listvalue不能按預期工作。由此產生的valueSafeText類型,而不是list。這可以通過使用this answer來檢查,其中添加了自定義模板標籤get_type以獲取變量的類型。

{% firstof some_list as value %} 
{{ some_list|get_type }} 
{{ value|get_type }} 

這說明如下:

<class 'list'> 
<class 'django.utils.safestring.SafeText'> 

望着documentation接近它指出firstof

輸出第一個參數變量是不假。

在他們的例子表明{% firstof some_list some_string %}變爲:

{% if some_list %} 
    {{ some_list }} 
{% elif some_string %} 
    {{ some_string }} 
{% endif %} 

這就解釋了爲什麼valueSafeText類型。該任務只是將其分配給變量value。這對我來說不是一個錯誤。

+0

感謝您的解釋。你知道這是預期的行爲還是錯誤? – Anupam

+0

我已經閱讀文檔並更新了答案。 – ikkuh

+0

嗯,不完全確定。如果它將輸出分配給一個變量,那麼該變量應該具有被分配的值的類型(否則該分配不會很有用)? – Anupam