Разобрать строку как словарь в шаблоне django, используя пользовательский фильтр - PullRequest
0 голосов
/ 29 января 2020

Я пытаюсь разобрать текстовое поле в шаблоне django, отправленном из представления, используя пользовательский фильтр. Соответствующее поле представляет собой текстовое поле в наборе запросов.

Соответствующие фрагменты кода:

app / views.py

from app.models import Tickets
def ticket_display(request):
    fields = [('ticket_id', 'Ticket ID'), ('title', 'Title'), ('description', 'Description'), ('is_accepted', 'Is Accepted'), ('eric_user', 'Accepted By'), ('logs', 'Logs'), ('attachments', 'File'),('assignee', 'Current Assignee'),('status', 'Current Status'),('date_created','Date Raised')]

    data = Tickets.objects.filter(status__in = ['New', 'Open', 'Inprogress','Resolved']).values(*[k for k,v in fields]).order_by('-date_created').order_by('-ticket_id')

    context ={
        'title':'Tickets',
        'fields':fields,
        'data':data,
}

    return render(request,'app/ticket_display.html',context)

Обратите внимание, что logs в полях представляет собой текстовое поле .

app / templatetags / custom_tags.py:

import ast
from django import template
register = template.Library()


@register.filter
def make_dict(val):
    return ast.literal_eval(val)

templates / ticket_display. html:

{% load custom_tags %}
{% for row in data %}
    // irrelevant code 
    {{row.logs| make_dict}} // this works fine i.e converts to dict  
    {% for k,v in row.logs.items | make_dict %} // raises TemplateSyntaxError ('for' statements should use the format 'for x in y': for k,v in row.logs| make_dict)
        // manipulate k and v                                     
    {% endfor %}
{% endfor %}

Какой должен быть подход к пропуску фильтра row.logs в make_dict для использования его в качестве словаря, Или я может сохранить его в некоторой переменной в шаблоне, а затем использовать его внутри l oop.

Любая помощь будет оценена.

Спасибо.

...