如何使用过滤器自定义模板从html文件访问字典值?

时间:2019-06-13 21:00:28

标签: python html django django-template-filters

我无法从.html文件访问在views.py中声明的字典值。

几个小时以来,我一直在尝试使用以前的几个线程,但我看不到它。我确定我做错了什么。

views.py

def test(request):
    now = datetime.now()
    day = now.strftime("%Y-%m-%d")
    year = now.strftime("%Y")
    month = now.strftime("%m")

    context  = {
              "content": [day,year,month],
              "object_list": queryset     
             }
    return render(request, "test.html", context)

filter.py

from django.template.defaulttags import register

@register.filter(name='get_item')
def get_item(dictionary, key):
    return dictionary.get(key)

test.html

{% load filtres_dictionary %}
{% with content.get_item.day as content.day %}

    <p>{{ content|get_item:content.day }}</p>

{% endwith %}

我当前收到以下错误消息,我想得到的是:2019-06-13。在我的网站上打印。

/ test /处的VariantDoesNotExist 无法在['2019-06-13','2019','06']中查找关键[天]

1 个答案:

答案 0 :(得分:0)

以上不是一个字典值。这是一个列表。但是,您可以通过 index 来访问列表元素,例如:

<p>{{ content.0 }}</p>

{% with content.get_item.day as content.day %}行没有多大意义:您在这里似乎为假设词典指定了一个不存在的值。

话虽如此,但我不认为使用 list 是个好主意。实际上,您实际上最好使用字典,例如:

context = {
    'content': {
        'day': day,
        'month': month,
        'year': year
    },
    'object_list': queryset     
}

然后您可以在模板中以以下方式访问此文件:

<p>{{ content.day }}</p>
  

注意:这里使用的get_item模板过滤器在键本身是可变的时很有用,在这种情况下,您可以传递任意键。在这种情况下不是