我使用django-comment并希望预览,表单错误显示在项目的页面上。我决定更好地使用装饰器,写这个
def wrap(func):
def wrapper(request, *args, **kwargs):
item = Item.objects.get(url=kwargs['url'])
form = get_form()(item)
kwargs['form'] = form
if request.method == 'POST':
data = request.POST.copy()
form = get_form()(item, data)
if form.errors:
kwargs['form'] = form
else:
post_comment(request, next=None, using=None)
return func(request, *args, **kwargs)
return wrapper
但在我看来并不好......有人可以告诉你如何更好地写作吗?感谢
答案 0 :(得分:0)
使用装饰器的想法是,你可以避免编写大量代码,这些代码在离开函数后会弄乱你的数据。在这种情况下,你正在做一些特殊的事情,比如使用Item模型,所以我想你只会使用它一次。总之...
一种改进代码的方法,它总是传递给kwargs ['form']你的表单,即使它没有错误,如下所示:
def wrap(func):
def wrapper(request, *args, **kwargs):
item = Item.objects.get(url=kwargs['url'])
if request.method == 'POST':
data = request.POST.copy()
form = get_form()(item, data)
kwargs['form'] = form
if not form.errors:
post_comment(request, next=None, using=None)
return func(request, *args, **kwargs)
return wrapper