天天看点

Django 模板语法取值

1、models.py

1

2

3

4

5

6

7

8

9

<code>class Business(models.Model):</code>

<code>    </code><code>prodline = models.CharField(max_length=32)</code>

<code>    </code><code>code =models.CharField(max_length=32,null=True,blank=True)</code>

<code>class Host(models.Model):</code>

<code>    </code><code>nid = models.IntegerField(primary_key=True)</code>

<code>    </code><code>hostname</code> <code>= models.CharField(max_length=32,blank=True,null=True,db_index=True)</code>

<code>    </code><code>ip = models.GenericIPAddressField(blank=True,null=True,db_index=True)</code>

<code>    </code><code>port = models.IntegerField(blank=True)</code>

<code>    </code><code>prodline = models.ForeignKey(Business,to_field=</code><code>'id'</code><code>,on_delete=models.DO_NOTHING,null=True,blank=True)</code>

2、数据

<a href="https://s3.51cto.com/wyfs02/M01/99/0F/wKiom1lDd2KAsOQwAAC9aC4ngQ4275.png" target="_blank"></a>

3、views.py

<code>from django.shortcuts </code><code>import</code> <code>render</code>

<code>from models </code><code>import</code> <code>*</code>

<code># Create your views here.</code>

<code>def business(request):</code>

<code>    </code><code>prodline1 = Business.objects.all()</code>

<code>    </code><code>prodline2 = Business.objects.all().values(</code><code>'id'</code><code>,</code><code>'code'</code><code>)</code>

<code>    </code><code>prodline3 = Business.objects.all().values_list(</code><code>'id'</code><code>,</code><code>'code'</code><code>)</code>

<code>    </code><code>return</code> <code>render(request,</code><code>'business.html'</code><code>,{</code><code>'prodline1'</code><code>:prodline1,</code><code>'prodline2'</code><code>:prodline2,</code><code>'prodline3'</code><code>:prodline3})</code>

分析:这里prodline1、prodline2、prodline3数据类型都是QuerySet,但内部数据是不同类型的。

prodline1内部是对象,prodline2内部是字段,prodline3内部是元组。

我们可以通过python manage.py shell 在命令行查看他们内部数据结构类型和数据结构

10

11

12

13

14

15

16

<code>&gt;&gt;&gt; from study.models </code><code>import</code> <code>*</code>

<code>&gt;&gt;&gt; proline1 = Business.objects.all()</code>

<code>&gt;&gt;&gt; print </code><code>type</code><code>(proline1)</code>

<code>&lt;class </code><code>'django.db.models.query.QuerySet'</code><code>&gt;</code>

<code>&gt;&gt;&gt; prodline1 = Business.objects.all()</code>

<code>&gt;&gt;&gt; prodline1</code>

<code>[&lt;Business: Business object&gt;, &lt;Business: Business object&gt;, &lt;Business: Business object&gt;, &lt;Business: Business object&gt;]</code>

<code>&gt;&gt;&gt; prodline2 = Business.objects.all().values(</code><code>'id'</code><code>,</code><code>'code'</code><code>)</code>

<code>&gt;&gt;&gt; prodline2</code>

<code>[{</code><code>'code'</code><code>: u</code><code>'SPMS'</code><code>, </code><code>'id'</code><code>: 1}, {</code><code>'code'</code><code>: u</code><code>'IPMS'</code><code>, </code><code>'id'</code><code>: 2}, {</code><code>'code'</code><code>: u</code><code>'CPMS'</code><code>, </code><code>'id'</code><code>: 3}, {</code><code>'code'</code><code>: u</code><code>'AMS'</code><code>, </code><code>'id'</code><code>: 4}]</code>

<code>&gt;&gt;&gt; prodline3 = Business.objects.all().values_list(</code><code>'id'</code><code>,</code><code>'code'</code><code>)</code>

<code>&gt;&gt;&gt; prodline3</code>

<code>[(1, u</code><code>'SPMS'</code><code>), (2, u</code><code>'IPMS'</code><code>), (3, u</code><code>'CPMS'</code><code>), (4, u</code><code>'AMS'</code><code>)]</code>

prodline1 获取到的是一个个对象组成的列表(也可以说是集合)。

prodline2 获取到的也是一个个字典组成的列表(也可以说是集合)。

proline3 获取到的是一个个元组组成的列表(也可以说是集合)。

templates模板中如何分别通过对象、字典、元组来循环取值?

business.html

17

18

19

20

21

22

23

24

25

26

27

<code>&lt;!DOCTYPE html&gt;</code>

<code>&lt;</code><code>html</code> <code>lang</code><code>=</code><code>"en"</code><code>&gt;</code>

<code>&lt;</code><code>head</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>meta</code> <code>charset</code><code>=</code><code>"UTF-8"</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>title</code><code>&gt;&lt;/</code><code>title</code><code>&gt;</code>

<code>&lt;/</code><code>head</code><code>&gt;</code>

<code>&lt;</code><code>body</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>h1</code><code>&gt;业务线列表(对象)&lt;/</code><code>h1</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>ul</code><code>&gt;</code>

<code>        </code><code>{% for row in prodline1 %}</code>

<code>        </code><code>&lt;</code><code>li</code><code>&gt;{{ row.id }}-{{ row.code }}-{{ row.prodline }}&lt;/</code><code>li</code><code>&gt;</code>

<code>        </code><code>{% endfor %}</code>

<code>    </code><code>&lt;/</code><code>ul</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>h1</code><code>&gt;业务线列表(字典)&lt;/</code><code>h1</code><code>&gt;</code>

<code>        </code><code>{% for row in prodline2 %}</code>

<code>        </code><code>&lt;</code><code>li</code><code>&gt;{{ row.id }}-{{ row.code }}&lt;/</code><code>li</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>h1</code><code>&gt;业务线列表(元组)&lt;/</code><code>h1</code><code>&gt;</code>

<code>        </code><code>{% for row in prodline3 %}</code>

<code>        </code><code>&lt;</code><code>li</code><code>&gt;{{ row.0 }}-{{ row.1 }}&lt;/</code><code>li</code><code>&gt;</code>

<code>&lt;/</code><code>body</code><code>&gt;</code>

<code>&lt;/</code><code>html</code><code>&gt;</code>

首先:模板语法取值都是使用“.“,对象和字典的取值方法一样,点后面接字段名,而元组则是使用索引来取值,索引从0开始。

本文转自 曾哥最爱 51CTO博客,原文链接:http://blog.51cto.com/zengestudy/1937465,如需转载请自行联系原作者