2013-08-28 11 views
1

所以在我的Django URLS我希望能夠支持:Django中所需字符串和可選字符串的正確正則表達式是什麼?

mysite.com/section

mysite.com/section/

mysite.com/section/sectionAlphaNum

的mysite .COM /節/ sectionAlphaNum/

我現在有作爲URL模式:

(r'^section/(?P<id>\s?)?', section) 

這將使節/必需和可選的後任何,但它似乎永遠不會趕上我在進入任何sectionAlphaNum。在我views.py文件我有

def section(request,id): 
    if id == '': 
     # Do something with id 
    else: 
     # Do default action 

但它似乎從來沒有進入頂部,如果分支在哪裏做的東西與ID

回答

0
(r'^section(?:/(?P<id>\w+))?/$', section) 

通知最後?,使整個(?:/(?P<id>\w+))可選。

其他答案缺少?或者他們不作斜線的一個(/)可選就像我在(?:/(第一個做...

r'^section/(?:(?P<id>\w+)/)?$' # same result, last '/' optional. 

,使參數可選在功能上也是如此:

def section(request, id=None): 
    # ... 
+0

是的,這很有效(您提供的第二個代碼片段)。謝謝! –

1

你可以嘗試以下語法:(r'^section/(?P<id>\w+)/$', section)

+0

是否也接受字符?該ID是字母數字 –

+0

@JaredJoke正確,我輸入得太快! :) – Phil

1

在正則表達式中,^$分別表示字符串的開始和結束。

因此顯示/section/的網址是:

(r'^section/$', section_view) 

而URL顯示特定部分/section/section-id/是:

(r'^section/(?P<section_id>\w+)$', section_detail_view) 

理想情況下,你在你的views.py獨立意見:

def section_view(request): 
    # show page about the various sections 

def section_detail_view(request, section_id): 
    # show page about specific section by section_id 
1

urls.py:

... 
(r'^section/$', section), 
(r'^section/(?P<id>\w+)/$', section), 
... 

views.py:

def section(request, id=None): 
    if id is None: 
     ... 
    else: 
     ... 

到配置MIDDLEWARE_CLASSES追加只是斜線(從/section/section/)使CommonMiddleware。

+0

我試過這個,它似乎允許可選的想法,但不工作時,我做site.com/section –

+0

要添加斜槓啓用您的設置中的CommonMiddleware,如上所述。 – HankMoody

+0

是的,我有。它已經附加了斜槓。我在說,如果我省略了可選部分「sectionAlphaNum」,它不符合url –

相關問題