簡體   English   中英

如何在Django中將View上下文變量評估為Template變量?

[英]How can I evaluate a View context variable as a Template variable in Django?

我想將上下文變量從視圖傳遞到模板中,以指示模板應顯示的內容。

我有一個上下文列表變量column_headers ,它指示列表頁表中的列數以及應使用的標題文本。

context['column_list'] = [
    _('Animal'),
    _('Owner'),
    _('Reason'),
    _('Time'),
    _('Vet'),
    _('Status')
]

我想包含一個相關的列表變量,該變量告訴模板相應列中每個單元格要包括哪個變量,例如:

context['cell_vars'] = [
    'patient',
    'client',
    'reason',
    'start_time',
    'attending_staff',
    'status'
]

這樣變量FOO.client將出現在'Owner'列中,而FOO.attending_staff將出現在'Vet'列中, FOO.attending_staff

這樣做可以讓我有一個list.html頁面來處理我的所有列表。

所以,我的問題是這是否是一個好主意,如果是這樣,我將如何評估作為上下文變量呈現的“字符串”,即

{% for row in rows %} #loop over list data
    {{ row.attending_staff }} #work fine, but...
    {{ row.SOME_VARIABLE_THAT_HAS_VALUE_OF_'attending_staff' }} #doesn't
{% endfor %}

因此,如果x='attending_staff'我需要能夠評估變量row.x ,以便其實際評估row.attending_staff

這個用例非常明確,僅涉及顯示邏輯(由於數據已經在循環變量row因此不進行數據檢索),因此IMO可以很好地適合模板。

這將允許我有一個'list.hml'模板來處理幾乎所有列表,而不是我目前擁有的10 x foo_list.html頁面,它們彼此非常相似(表結構,循環邏輯,圖標,鏈接,CSS類名稱等)。

我認為自定義標簽或過濾器將是一個解決方案

例如:以下

@register.filter
def settings_value(name):
    return getattr(settings, name, "")

可以在模板中使用

{% load your_filters %}
{{ "MY_SETTINGS_NAME"|settings_value }}

您是否嘗試過這種方式? 也許您沒有選擇的余地:

# Python script
context['column_list'] = [
    _('Animal'),
    _('Owner'),
    _('Reason'),
    _('Time'),
    _('Vet'),
    _('Status')
]

context['cell_vars'] = [
    'patient',
    'client',
    'reason',
    'start_time',
    'attending_staff',
    'status'
]

g_context = zip(context['column_list'], context['cell_vars'])

# HTML
{% for column, var in g_context %}
    {{ column }}
    {{ var }}
{% endfor %}

這是您要的嗎?

暫無
暫無

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

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