圖書勘誤記錄(非圖靈)《Django Web 開發指南》第8章
在學習《Django Web 開發指南》這本書上第8章的例子 其它一切都還好,就是遇到個難解的問題 在訪問如:http://localhost:8000/cms/search/?q=2 這樣得地址時,總是出現:
Page not found (404)
Request Method: GET
Request URL: http://localhost:8000/cms/search/?q=2
No story found matching the query
專案的 urls.py 如下:
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^cms/',include('cms.urls')),
)
app 的 urls.py 如下:
from django.conf.urls.defaults import *
from models import Story
info_dict = { 'queryset': Story.objects.all(), 'template_object_name': 'story' }
urlpatterns = patterns('django.views.generic.list_detail',
url(r'^(?P<slug>[-\w]+)/$', 'object_detail', info_dict, name="cms-story"),
url(r'^$', 'object_list', info_dict, name="cms-home"),
)
urlpatterns += patterns('cms.views',
url(r'^category/(?P<slug>[-\w]+)/$', 'category', name="cms-category"),
url(r'^search/$', 'search', name="cms-search"),
)
對應的 search VIEW 程式碼如下:
def search(request):
"""
Return a list of stories that match the provided search term
in either the title or the main content.
"""
if 'q' in request.GET:
term = request.GET['q']
story_list = Story.objects.filter(
Q(title__contains=term) | Q(markdown_content__contains=term))
heading = u"搜尋結果"
return render_to_response("cms/story_list.html", locals())
由於對 Django 的 URL 機制瞭解不深,遇到該問題後一直非常困擾
最後在 search 這個 View 中插入了 assert False
發現頁面沒有如預期那樣出現 assert 頁面
還是之前的頁面,懷疑是 Django 的 URLConf 出了問題,最終在 app 的 urls.py 中找到原因所在:
url(r'^(?P<slug>[-\w]+)/$', 'object_detail', info_dict, name="cms-story"),
這一行的配置覆蓋了其後的:
url(r'^search/$', 'search', name="cms-search"),
如果按照書上(以及叢作者網站下載的程式碼)的寫法,search 這個 View 將永遠無法得到呼叫
將兩組 url 換了一下順序:
from django.conf.urls.defaults import *
from models import Story
info_dict = { 'queryset': Story.objects.all(), 'template_object_name': 'story' }
urlpatterns = patterns('cms.views',
url(r'^category/(?P<slug>[-\w]+)/$', 'category', name="cms-category"),
url(r'^search/$', 'search', name="cms-search"),
)
urlpatterns += patterns('django.views.generic.list_detail',
url(r'^(?P<slug>[-\w]+)/$', 'object_detail', info_dict, name="cms-story"),
url(r'^$', 'object_list', info_dict, name="cms-home"),
)
結果正常了。
此外,該書中譯本第148頁程式碼中
search_fields = ('title','content')
應當修改為
search_fields = ('title','markdown_content')
看來原作者和譯者都沒有對書中的程式碼進行嚴格的檢查啊。 順便BS下少數不負責任的圖書出版商。
不過,該章內容中介紹了用 django 搭建支援 markdown 的 CMS 相關內容,還是值得一看。
相關文章
- 怎樣給圖靈出版的圖書提交勘誤圖靈
- [圖靈贈書]《Java效能權威指南》轉發贈書圖靈Java
- 分享“程式設計師人生指南”贏圖靈圖書!程式設計師圖靈
- web前端開發閒置圖書Web前端
- 圖靈社群圖書館開業啦!圖靈
- 我的圖靈圖書列表圖靈
- 圖靈技術演算法群第1期:《演算法圖解》讀書筆記圖靈演算法圖解筆記
- 【圖靈贈書】《精通Linux(第2版)》點評贈書圖靈Linux
- 【第5波贈書】贈敏捷開發類圖書25本敏捷
- 我的圖靈書圖靈
- 圖靈淘寶商城圖書秒殺圖靈
- 圖靈2014非技術類圖書最受歡迎TOP15圖靈
- 從Python開始——圖靈圖書學習路線Python圖靈
- 圖靈成立七週年——圖靈教育,我,那些書圖靈
- 圖靈Python圖書一覽表圖靈Python
- Django學習筆記《二》圖書管理系統Django筆記
- 圖靈八月書訊 ——技術圖書嘉年華圖靈
- 圖靈10月書訊圖靈
- 圖靈11月書訊圖靈
- 圖靈12月書訊圖靈
- 圖靈1月書訊圖靈
- 圖靈新知近期新書圖靈新書
- 圖靈8月書訊圖靈
- 我的圖靈書列表圖靈
- 果斷嗮圖靈書圖靈
- 圖靈書訊動態圖靈
- 圖靈設計書近期新書圖靈新書
- 閱讀圖靈iOS開發相關書籍讀後感圖靈iOS
- 圖靈成立七週年——圖靈書與翻譯事圖靈
- 《圖解HTTP》--讀書筆記(目錄)圖解HTTP筆記
- 圖靈技術圖書譯者須知圖靈
- 圖靈資料庫圖書一覽表圖靈資料庫
- 圖書推薦之希望圖靈引進圖靈
- web開發中圖形Web
- 圖靈暑期大型贈書活動書單圖靈
- 購書開啟圖靈第一天圖靈
- 前端書單(圖靈社群版)前端圖靈
- 我與圖靈書的“邂逅”圖靈