django 傳遞參數的方式

1、view和url傳遞參數

            參數方式一: url.py
            path('xxx/', MailTemplateList.as_view(), name='MailTemplateList'),
            path('xxx/<str:id>/', MailTemplateList.as_view(), name='MailTemplateList'),
            說明: http://xxx/id 這個id可以在 get(self,request,id=none) 方法中,用實參數獲取,必須同名,也叫id

            參數方式二:html的href
               <a href="xxx/?{%p_code=130000%}">{{ 河北省  }}
             p_code = kwargs.get('p_code')
             #如上,p_code的獲取方法是kwargs字典

2、Form傳遞參數

#(1)view中調用Form
formset = KhPersonResultFormSet(username=request.user.username, period_id=self.kwargs.get('period_id'))

#(2)form的init中,提取參數,進行動態初始化
class KhPersonResultFormSet(RecordBase):
    def __init__(self, *args, **kwargs):
        self.username = kwargs.pop('username')
        self.period_id = kwargs.pop('period_id')
        super().__init__(*args, **kwargs)
        # myuser = get_object_or_404(User, username=self.username)
        self.queryset = KhPersonResult.objects.filter(zhukao_user=self.username, kaohe_period=self.period_id).order_by('beikao_user__user_type','beikao_user__jg__id','beikao_user__p_bh')

 

3、字典參數 的pop和get

def my_func(a, b, **kwargs):
    c = kwargs.get("c", 0)
    return a + b + c


#在model中,custom save參數,添加保存的字段
# blog/models.py
def save(self, **kwargs):
    self.updated_date = datetime.now()
    super().save(**kwargs)

 

調用第三方api的改善:The long way:

def get_orders(api, a = None, b = None, c = None, d = None, e = None, f = None, g = None):
    return api.get(a=a, b=b, c=c, d=d, e=e, f=f, g=g)

The short way:

def get_orders(api, **kwargs):
    return api.get(**kwargs)

dict.get, dict.pop的唯一區別是:pop後,字典裏就剔除了,get可以多次數據不變
def multiply_numbers(**kwargs):
    x = kwargs.get('x',0)
    y = kwargs.get('y',0)
    return x * y
print(multiply_numbers(x=5,y=6)) # Output: 30


def add_numbers(**kwargs):
    x = kwargs.pop('x',0)
    y = kwargs.pop('y',0)
    return x + y
print(add_numbers(x=5,y=6)) # Output: 11

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章