Я пытаюсь разобрать текстовое поле в шаблоне 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.
Любая помощь будет оценена.
Спасибо.