How can I use a variable as index in django template?

霸气de小男生 提交于 2019-12-18 05:07:46

问题


How can I use a variable as index in django template?

Right now I get this error:

Exception Type:
TemplateSyntaxError

Exception Value:    
Could not parse the remainder: '[year]' from 'bikesProfit.[year]'

I also tried {{ bikesProfit.year }} but this gives an empty result.

 {%  for year in years_list %}

        <tr>
            <th>Total profit {{ year }}:</th>
        </tr>
        <tr>
            <th></th>
            <th> {{ bikesProfit[year] }} </th>

...

回答1:


It's a very common question, there are a lot of answers on SO.

You can make custom template filter:

@register.filter
def return_item(l, i):
    try:
        return l[i]
    except:
        return None

Usage:

{{ bikesProfit|return_item:year }}



回答2:


I don't think this is directly possible (edit: you can manually implement it with filters, as shown in goliney's answer). The documentation says:

Because Django intentionally limits the amount of logic processing available in the template language, it is not possible to pass arguments to method calls accessed from within templates. Data should be calculated in views, then passed to templates for display.

If your case is not more complicated than what you're showing, the best solution in my opinion would be to loop over bikeProfit instead.

{% for year, profit in bikeProfit.items %}
    ...
    <th>Total profit {{ year }}:</th>
    ...
    <th> {{ profit }} </th>
    ...



回答3:


It's possible, but goes against the grain of the Django model...

If you have items of interest, then ideally your view should return an object just containing those items, (OTTOMH something like):

Something.objects.filter(something__typename='Bike', year__range=(1998, 2001)) 


来源:https://stackoverflow.com/questions/13376576/how-can-i-use-a-variable-as-index-in-django-template

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!