簡體   English   中英

Django CBV:輕松訪問get_context_data()中的url參數?

[英]Django CBV: Easy access to url parameters in get_context_data()?

我了解在自定義get_context_data()方法中訪問命名url參數的標准方法是通過self.kwargs

但是, self.kwargs語法變得笨拙,尤其是在處理大量參數時。 因此,在每個get_context_data()方法的頂部,我一直在訴諸類似的方法-只是為了獲得易於處理的局部變量:

def get_context_data(self, **kwargs):
    var1, var2, var3, var4, var5 = [self.kwargs[x] for x in ['var1', 'var2', 'var3', 'var4', 'var5']]
    # do stuff with var1, var2, ...
    # instead of self.kwargs['var1'], self.kwargs['var2'], ...

這很丑陋,很痛苦,但是最終使事情變得更容易使用和閱讀。

有沒有一種簡單的方法可以清理它並將命名參數轉換為局部變量? 缺少覆蓋get()方法,子類化Django的通用視圖等嗎? 我懷疑我只是在這里缺少一些非常基本的,基本的python概念。

這是調用get_context_data()的默認get()方法, get_context_data()在這里參考:

def get(self, request, *args, **kwargs):
    context = self.get_context_data(**kwargs)
    return self.render_to_response(context)

更新:

我的錯誤是,調用get()方法實際上如下(在這種情況下,通用FormView被子類化了)。 不幸的是,傳遞給get_context_data()self.kwargsself.kwargs

def get(self, request, *args, **kwargs):
    form_class = self.get_form_class()
    form = self.get_form(form_class)
    return self.render_to_response(self.get_context_data(form=form))

非常感謝!

如果傳遞給kwargs get_context_data相同self.kwargs ,你可以這樣做:

def get_context_data(self, var1, var2, var3, var4, var5, **kwargs):
    # do stuff with var1, var2, ...

編輯:您可以重寫get方法來傳遞kwargs。我知道它並不優雅,但可以使用。 您可以制作一個mixin以在多個類中使用。

def get(self, request, *args, **kwargs):
    form_class = self.get_form_class()
    form = self.get_form(form_class)
    return self.render_to_response(self.get_context_data(form=form, **kwargs))

除此之外,我真的想不出更好的方法。 您最初的解決方案可能是最好的。 我通常只直接訪問self.kwargs['...']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM