2016年6月4日 星期六

Django View 小筆記


這個做法是把loading放在template,弱化了url, view的code.
算是把重心放到前端上的技巧。

在此使用的Model如下
Model
class TestObj(models.Model):
name = models.CharField(max_length=10)
create_datetime = models.DateTimeField()

def __str__(self):
return "%s, %s" % (self.name, self.create_datetime.date())


Url
url有一個變數稱為pk, pk是primay key的縮寫, 在此要填的是主key的值。
from django.conf.urls import url
from . import views


urlpatterns = [
#...
#test View
url(r'^test/(?P[0-9]+)/$', views.TestObjView.as_view(), name='test'),
]

View

view有兩種,一個是取model物件的DetailView,一個是取QuerySet的ListView

ListView
template_name 預設值為<app name>/<template name>_list.html
# -*- coding: utf-8 -*-
from . import models
from django.views import generic

class TestObjView(generic.ListView):
model = models.TestObj
#template_name = 'testobj.html' #可自行手動指定

DetailView
template_name 預設值為<app name>/<template name>_detail.html
另一個是ListView, 顯示QuerySet的結果。
預設Query完的變數名稱: <model name>_list
# -*- coding: utf-8 -*-
class TestObjView(generic.ListView):
model = models.TestObj
#template_name = 'testobj.html' #可自行手動指定

TEMPLATE
依你設定的View來決定template的命名。

必須要先接list裡的物件出來
在此示範使用預設檔名 testobj_list.html
{% for testobj in testobj_list %}
{{testobj.name}}
{% empty %}
無資訊

{% endfor %}

直接取屬性出來顯示
在此示範使用預設檔名 testobj_detail.html
{{testobj.name}}

沒有留言:

張貼留言