我的django之旅(四)模型,模板和視圖


一.結合模型,視圖和模板

1.數據和模板結合

基本工作流程:
(1)在views.py文件中導入我們創建的models
(2)在視圖函數中使用models,進行crud操作。
(3)將取得的數據存入template的上下文
(4)在template中給我們的數據找好位置,渲染它們。

2.初探模板語言

{% if %}
{% endif %}
if語句,和普通使用的不同在於必須用{% %} 包裹,而且當結束時有一個{% endif %}
{% for %}
{% endfor %}
for語句同理亦然。
{{data}},在兩層大括號的包裹中,存放的是數據,可以通過if,for等分支,循環語句,將list中的數據取出來。

3.如何設計URL

我們的rango應用下有許多的頁面,url的名稱設計也是一個頗為重要的任務。如果url過於模糊,例如/rango/1或者/rango/2可能連我們自己都會不知所雲。如果在url上添加頁面的相關信息就好的多了,比如/rango/python,這是一個和python相關的頁面。
並且python是從數據庫中取出的相關字段。那么一個字段有空格又怎么辦呢?比如
python framework。這就需要用到slug字段了。它會將python framework轉換成python-framework.

3.Slug

首先引入slugify函數

from django.template.default.defaultfilters import slugify

在model中添加slug字段

slug=models.SlugField(unique=True)

重寫save函數

ef save(*args,**kwargs):
	self.slug=slugify(self.name)
	super(<model-name>,self).save(*args,**kwargs)

4.注意事項

由於我們設置的slug是一個必須的(unique)值,如果要對model的改動遷移,會報如下的錯誤:

Please select a fix:
1) Provide a one-off default now (will be set on all existing rows)
2) Quit, and let me add a default in models.py

解決方案:選擇1,輸入' '即可,這表示將字段默認值設置為空字符串,但是接下來的步驟還是會報錯

django.db.utils.IntegrityError: UNIQUE constraint failed: rango_category__new.slug

解決方案詳細:http://stackoverflow.com/questions/29373887/django-db-utils-integrityerror-unique-constraint-failed-rango-category-new-sl
給slug字段添加一個默認值uuid,還是失敗

真-解決方案:
http://www.cnblogs.com/FARAMIR/p/4632355.html
由此可見,教程也不是完全正確,必須要不斷的折騰才行。
PS:mysql就是比sqlite好用。

5.詳細頁面

我們的首頁只有分類,點擊分類后才進入詳細頁面。詳細頁面顯示的就是page的信息,所以要引入page的model
要進入詳細頁面,勢必要設置url

url設置如下:

url(r'^category/(?P<category_name_slug>[\w\-]+)/$', views.category, name='category')

?P<category_name_slug>代表將這個值作為參數傳入到category這個視圖函數中,后面的正則表達式[\w\-]+代表匹配slug值

在視圖函數中要接收這個值的話就要新增參數

def category(request,category_name_slug)

因為已經設置slug值為unique,所以通過slug值我們可以找到唯一的Category對象,通過這個對象再找到page對象們。將信息存入context_dict{},在模版中渲染數據即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM