天天看點

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,如需轉載請自行聯系原作者