您如何使用基於視圖的url參數創建默認值?在例如TemplateView基於類的視圖中的可選url參數
例如:
url(r'^(?P<num>\d+)|/$', MyView.as_view())
如果URL中沒有指定num我想設置的「4」
您如何使用基於視圖的url參數創建默認值?在例如TemplateView基於類的視圖中的可選url參數
例如:
url(r'^(?P<num>\d+)|/$', MyView.as_view())
如果URL中沒有指定num我想設置的「4」
的默認值。如果在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。
我強烈建議避免重寫'get',除非它是絕對必要的。基於類的視圖提供了一系列更適合於此的方法,具體取決於您要實現的實際「View」類,以及您打算如何處理此參數。例如,如果您需要它在'DetailView'中實例化對象,則覆蓋'get_object';如果你只是想在模板中使用它,請使用'get_context_data';等等。 –
@BerislavLopac同意。這是使CBV有點尷尬的一件事 - 你需要知道哪種方法可以覆蓋。有不止一種方法可以做,而且如果沒有適當的經驗來覆蓋哪種方法是不明確的。 – ustun
如果指定包含名稱,如正則表達式:
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
你可以發佈一些代碼來顯示你正在嘗試做什麼? –