2013-01-20 17 views
2

您如何使用基於視圖的url參數創建默認值?在例如TemplateView基於類的視圖中的可選url參數

例如:

url(r'^(?P<num>\d+)|/$', MyView.as_view()) 

如果URL中沒有指定num我想設置的「4」

+0

你可以發佈一些代碼來顯示你正在嘗試做什麼? –

回答

1

的默認值。如果在URL中沒有指定num然後Django不會在urls.py中使用該行來顯示頁面。您可以通過修改URL配置這樣來實現這一目標:

url(r'^$', MyView.as_view()) 
url(r'^(?P<num>\d+)|/$', MyView.as_view()) 

而且在MyView,你可以得到的參數做:

def get(self, request, *args, **kwargs): 
    my_url = request.GET.get('url', 4) 

這兩種分配中的URL給my_url值否則爲默認值4。

+1

我強烈建議避免重寫'get',除非它是絕對必要的。基於類的視圖提供了一系列更適合於此的方法,具體取決於您要實現的實際「View」類,以及您打算如何處理此參數。例如,如果您需要它在'DetailView'中實例化對象,則覆蓋'get_object';如果你只是想在模板中使用它,請使用'get_context_data';等等。 –

+0

@BerislavLopac同意。這是使CBV有點尷尬的一件事 - 你需要知道哪種方法可以覆蓋。有不止一種方法可以做,而且如果沒有適當的經驗來覆蓋哪種方法是不明確的。 – ustun

3

如果指定包含名稱,如正則表達式:

url(r'^(?P<num>\d+)|/$', MyView.as_view()) 

然後num將始終作爲關鍵字參數傳遞給您的視圖功能通過。如果正則表達式匹配但沒有num匹配,則num將作爲無傳遞給您的視圖。

鑑於下面的視圖函數:

def get(self, request, *args, **kwargs): 
    print 'args %s' % repr(args) 
    print 'kwargs %s' % repr(kwargs) 

通過的runserver打印的輸出如下所示:

# url:/
args() 
kwargs {'num': None} 

# url: /45/ 
args() 
kwargs {'num': u'45'} 

這取決於你以檢測None值並分配一個默認爲適當。

def get(self, request, *args, **kwargs): 
    num = kwargs.get('num', None) 
    if num is None: 
     num = 4 
相關問題