簡體   English   中英

Python / Django:簡單的Django模板

[英]Python/Django: Simple Django Template

嗨,我正在使用App Engine / Python來做一個簡單的網站。 我在Django模板問題上遇到了一些麻煩。

簡而言之,我想使用“ ShortName”來訪問“ LongName”。

源代碼:

LongName={"so":"stackoverflow","su":"superuser"}
ShortName=['so','su']

然后,我將這兩個參數傳遞給模板。

在模板中,我寫:

{% for aname in ShortName %}
{{ aname }} stands for {{ LongName.aname }},
{% endfor %}

輸出為:

so stands for, su stands for

沒有錯誤。 LongName.aname無法正常工作。

我不知道怎么了

這試圖訪問LongName['aname'] ,而不是LongName[aname]

您可能必須編寫一個自定義模板標簽/過濾器才能使它起作用。 此Django錯誤 (標記為WONTFIX)具有一個簡單的實現:

def get(d, key):
    return d.get(key, '')

register.filter(get)

您將使用的

{{ LongName|get:aname }}

將其添加到您的應用后 (該答案將顯示如何在GAE上進行操作)。


您還可以通過傳入一個預變量來在視圖中循環

 # in view
 name_abbrevs = [(k, LongName[k]) for k in ShortName]

 # in template
 {% for short_name, long_name in name_abbrevs %}
     {{ short_name }} stands for {{ long_name }}
 {% endif %}

如果您真的不想添加模板標簽,那還不錯! 您只需制作一個文件! :)-或傳入一個額外的變量, Vic的方法將使您完全不必接觸Python文件。 正如他提到的那樣,它涉及很多無意義的迭代,但對於較小的列表來說可以很好地工作。

Django模板在這里有一個缺點。 我以前也遇到過同樣的情況。 您要做的是遍歷LongName中的所有鍵,並檢查您要查找的鍵是否與ShortName相匹配。 干得好:

{% for aname in ShortName %}
  {% for short_version, long_version in LongName %}
    {% if aname == short_version %}
      {{ aname }} stands for {{ long_version }},
    {% endif %}
  {% endfor %}
{% endfor%}

它效率低下,並且本質上是沒有意義的O(n ^ 2)機制。 但是,在純Django模板中沒有更好的方法通過變量名引用字典的條目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM