如何访问 Django 模板中的字典列表
How to access list of dictionary in Django template
我是 Django 的新手,通过观看几个教程实现了 post-api 调用,其中一个字段获取字典列表,想要访问中的键值对Django 模板,而不是逐个字符获取字符,我是否必须更改 Message
字段的 models.py 中的定义或在 views.py 中使用 JSON parser
?如何解决这个问题有问题吗?
models.py
class Leads(models.Model):
Name = models.CharField(max_length=50)
Mobile = models.CharField(max_length=13)
Email = models.CharField(max_length=50)
Message = models.CharField(max_length=300)
created_on = models.DateTimeField(default=datetime.now())
modified_on = models.DateTimeField(default=datetime.now())
上述 api 调用的示例输入为:
Name = rakesh
Mobile = 1234567890
Email = email@mail.com
Message = [{'key': 'some text', 'value': 'some value'}, {'key': 'some text', 'value': 'some value'}]
这就是我的 api 记录存储在数据库中的方式
views.py
@api_view(["POST"])
def userLeads(request):
try:
if request.method == 'POST':
Name = request.data['Name']
Email = request.data['Email']
Mobile = request.data['Mobile']
Message = request.data['Message']
datainsertion = models.Leads(Name = Name, Email = Email, Mobile = Mobile,Message= Message)
datainsertion.save()
content = {'Leads_Status': 'Created'}
return Response(content, status=status.HTTP_200_OK)
except Exception as e:
print (e)
content = {'Order_Status': 'Failed'}
return Response(content, status=status.HTTP_424_FAILED_DEPENDENCY)
Views.py
def chat_Leads_view(request):
user_list = models.Leads.objects.all().order_by('-id')
myFilter = UserFilter(request.GET, queryset=user_list)
user_list = myFilter.qs
page = request.GET.get('page', 1)
paginator = Paginator(user_list, 5)
try:
users = paginator.page(page)
except PageNotAnInteger:
users = paginator.page(1)
except EmptyPage:
users = paginator.page(paginator.num_pages)
segment = 'leads'
context = {
"users": users,
"segment":segment,
"myFilter":myFilter
}
return render(request, "leads.html", context)
template.html
{%for user in users %}
<tr>
<td>{{user.Name}}</td>
<td>{{user.Mobile}}</td>
<td>{{user.Email}}</td>
<td>{{user.Message}}</td>
</tr>
{%endfor%}
如果我像上面那样尝试,那么输出是
rakesh 1234567890 emaik@mail.com [{'key': 'some text', 'value': 'some value'}, {'key': 'some text', 'value': 'some value'}]
如果我为 Message
字段添加另一个循环,则 Message
字段不会显示任何输出:
{%for user in users %}
<tr>
<td>{{user.Name}}</td>
<td>{{user.Mobile}}</td>
<td>{{user.Email}}</td>
{%for i in user.Message %}
<td>{{i.key}}</td>
<td>{{i.value}}</td>
{%endfor%}
</tr>
{%endfor%}
输出:
按字符串显示字符串
rakesh 1234567890 emaik@mail.com
如果我这样尝试的话:
{%for user in users %}
<tr>
<td>{{user.Name}}</td>
<td>{{user.Mobile}}</td>
<td>{{user.Email}}</td>
{%for i in user.Message %}
<td>{{i}}</td>
{%endfor%}
</tr>
{%endfor%}
输出:
rakesh 1234567890 emaik@mail.com [ { ' k e y ' : ' s o m e t e x t ' , ' v a l u e ' : 's o m e v a l u e ' }, { ' k e y ' : ' s o m e t e x t ' , ' v a l u e ' : ' s o m e v a l u e ' } ]
我想要的 Django 模板方式是:
rakesh 1234567890 emaik@mail.com key:value
key: value
您的消息不是字典列表。它只是一个包含一些数据的字符串,看起来像字典列表。
您可能应该将其更改为 JsonField
[Django-doc]:
class Leads(models.Model):
Name = models.CharField(max_length=50)
Mobile = models.CharField(max_length=13)
Email = models.CharField(max_length=50)
Message = models.<strong>JSONField()</strong>
created_on = models.DateTimeField(<strong>auto_now_add=True</strong>)
modified_on = models.DateTimeField(<strong>auto_now=True</strong>)
并用数据重新填充数据库。在这种情况下,访问该消息确实会 return 一个字典列表,然后您可以使用该列表呈现:
<td>
{% for item in user.Message %}
{{ item<strong>.key</strong> }}<br>
{{ item<strong>.value</strong> }}
{% endfor %}
</td>
Note: normally a Django model is given a singular name, so Lead
instead of Leads
.
Note: normally the name of the fields in a Django model are written in snake_case, not PascalCase, so it should be: message
instead of Message
.
Note: Django's DateTimeField
[Django-doc]
has a auto_now_add=…
parameter [Django-doc]
to work with timestamps. This will automatically assign the current datetime
when creating the object, and mark it as non-editable (editable=False
), such
that it does not appear in ModelForm
s by default.
我是 Django 的新手,通过观看几个教程实现了 post-api 调用,其中一个字段获取字典列表,想要访问中的键值对Django 模板,而不是逐个字符获取字符,我是否必须更改 Message
字段的 models.py 中的定义或在 views.py 中使用 JSON parser
?如何解决这个问题有问题吗?
models.py
class Leads(models.Model):
Name = models.CharField(max_length=50)
Mobile = models.CharField(max_length=13)
Email = models.CharField(max_length=50)
Message = models.CharField(max_length=300)
created_on = models.DateTimeField(default=datetime.now())
modified_on = models.DateTimeField(default=datetime.now())
上述 api 调用的示例输入为:
Name = rakesh
Mobile = 1234567890
Email = email@mail.com
Message = [{'key': 'some text', 'value': 'some value'}, {'key': 'some text', 'value': 'some value'}]
这就是我的 api 记录存储在数据库中的方式
views.py
@api_view(["POST"])
def userLeads(request):
try:
if request.method == 'POST':
Name = request.data['Name']
Email = request.data['Email']
Mobile = request.data['Mobile']
Message = request.data['Message']
datainsertion = models.Leads(Name = Name, Email = Email, Mobile = Mobile,Message= Message)
datainsertion.save()
content = {'Leads_Status': 'Created'}
return Response(content, status=status.HTTP_200_OK)
except Exception as e:
print (e)
content = {'Order_Status': 'Failed'}
return Response(content, status=status.HTTP_424_FAILED_DEPENDENCY)
Views.py
def chat_Leads_view(request):
user_list = models.Leads.objects.all().order_by('-id')
myFilter = UserFilter(request.GET, queryset=user_list)
user_list = myFilter.qs
page = request.GET.get('page', 1)
paginator = Paginator(user_list, 5)
try:
users = paginator.page(page)
except PageNotAnInteger:
users = paginator.page(1)
except EmptyPage:
users = paginator.page(paginator.num_pages)
segment = 'leads'
context = {
"users": users,
"segment":segment,
"myFilter":myFilter
}
return render(request, "leads.html", context)
template.html
{%for user in users %}
<tr>
<td>{{user.Name}}</td>
<td>{{user.Mobile}}</td>
<td>{{user.Email}}</td>
<td>{{user.Message}}</td>
</tr>
{%endfor%}
如果我像上面那样尝试,那么输出是
rakesh 1234567890 emaik@mail.com [{'key': 'some text', 'value': 'some value'}, {'key': 'some text', 'value': 'some value'}]
如果我为 Message
字段添加另一个循环,则 Message
字段不会显示任何输出:
{%for user in users %}
<tr>
<td>{{user.Name}}</td>
<td>{{user.Mobile}}</td>
<td>{{user.Email}}</td>
{%for i in user.Message %}
<td>{{i.key}}</td>
<td>{{i.value}}</td>
{%endfor%}
</tr>
{%endfor%}
输出: 按字符串显示字符串
rakesh 1234567890 emaik@mail.com
如果我这样尝试的话:
{%for user in users %}
<tr>
<td>{{user.Name}}</td>
<td>{{user.Mobile}}</td>
<td>{{user.Email}}</td>
{%for i in user.Message %}
<td>{{i}}</td>
{%endfor%}
</tr>
{%endfor%}
输出:
rakesh 1234567890 emaik@mail.com [ { ' k e y ' : ' s o m e t e x t ' , ' v a l u e ' : 's o m e v a l u e ' }, { ' k e y ' : ' s o m e t e x t ' , ' v a l u e ' : ' s o m e v a l u e ' } ]
我想要的 Django 模板方式是:
rakesh 1234567890 emaik@mail.com key:value
key: value
您的消息不是字典列表。它只是一个包含一些数据的字符串,看起来像字典列表。
您可能应该将其更改为 JsonField
[Django-doc]:
class Leads(models.Model):
Name = models.CharField(max_length=50)
Mobile = models.CharField(max_length=13)
Email = models.CharField(max_length=50)
Message = models.<strong>JSONField()</strong>
created_on = models.DateTimeField(<strong>auto_now_add=True</strong>)
modified_on = models.DateTimeField(<strong>auto_now=True</strong>)
并用数据重新填充数据库。在这种情况下,访问该消息确实会 return 一个字典列表,然后您可以使用该列表呈现:
<td>
{% for item in user.Message %}
{{ item<strong>.key</strong> }}<br>
{{ item<strong>.value</strong> }}
{% endfor %}
</td>
Note: normally a Django model is given a singular name, so
Lead
instead of.Leads
Note: normally the name of the fields in a Django model are written in snake_case, not PascalCase, so it should be:
message
instead of.Message
Note: Django's
DateTimeField
[Django-doc] has aauto_now_add=…
parameter [Django-doc] to work with timestamps. This will automatically assign the current datetime when creating the object, and mark it as non-editable (editable=False
), such that it does not appear inModelForm
s by default.