[英]Django CBV - How to test get_context_data with uuid in 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.kwargs
与self.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.