2011-11-01 76 views
0

我有一個將數據插入到一個名爲srv的表格中的html表單。數據庫插入後urlpatterns不會更新?

我已經建立了urls.py以這樣的方式來捕捉每一個插入:

for item in srv.objects.all(): 
    linkSrv = item.loc.lower() + '/srv/' + item.subctg.lower() + '/' + item.title.lower() 
    urlpatterns += patterns('', 
    url(r'^' + linkSrv + '/$', 'beta.views.queryFromIndexDeep'), 
) 

的一個插入被製成後,如LOC =「祿」,subctg =「subctg」和標題=「標題」 如果我指出我的瀏覽器127.0.0.1:8000/loc/srv/subctg/title/我得到的HTTP404錯誤(沒有匹配的網址)

如果我'強制保存'urls.py(vim urls.py然後:x!) - 插入loc,subct,title後 - 我可以成功訪問127.0.0.1:8000/loc/srv/ subctg/title/

任何人都可以點亮一下嗎?它看起來像每次在srv表中插入一行時,urlpatterns都需要'更新'。

+0

你爲什麼這樣做?你爲什麼不使用正則表達式? – diegueus9

+0

由於IM在Django對於新手,我管理的URL模式,因爲我知道,但我閱讀有關正則表達式現在 – marlboro

+1

大,看答案,看看這個https://docs.djangoproject.com/en/1.3/intro/tutorial03/ – diegueus9

回答

2

你應該只使用這樣的事情:

urlpatterns += patterns('', 
    url(r'^(?P<loc>\w+)/(?P<subctg>\w+)/(?P<title>\w+)/$', 
         'beta.views.queryFromIndexDeep'), 
) 

使用正則表達式匹配您的看法是比較容易的方式,並建議。在您看來,上述內容將匹配一個定義爲beta.views.queryFromIndexDeep(request, loc, subctg, title)的函數,您可以從中繼續使用這些變量來從定義的模型中提取相關數據。

+0

謝謝,即時嘗試它現在 loc,subctg和標題應該在queryFromIndexDeep中通過訪問必要的模型獲得,對吧? 你也可以告訴爲什麼它只有在urls.py被強制保存後才能工作(使用我的代碼)? – marlboro

+0

它的工作原理是爲數據庫中的每個條目手動創建新的URL定義。當您創建一個新條目並運行更新代碼時,只有這樣它才能找到它。使用上面的內容,在你的視圖中,你可以使用'srv.objects.get(loc = loc,subctg = subctg,title = title)'來檢索當前url的對象。 – jro

+0

我已經更新了上面的urls.py,並且設置了queryFromIndexDeep(request,loc,subctg,title):return render_to_response('test.html'),但是當訪問與上面相匹配的鏈接時我仍然獲得404模式。我究竟做錯了什麼 ? :( – marlboro

0

添加slugfield(唯一的)到您的SRV模型和方法添加到模型

def get_absolute_url(self): 
    return /yourapp/%s/ % self.slug 

然後在網址中使用模式來匹配這個

url(r'^srv/(?P<slug>[-\w]+)/$', yourgenericview), 

查找到Django的slugify的這段爲樂趣http://djangosnippets.org/snippets/690/