当前页面上的django-comments预览

时间:2011-07-12 16:00:26

标签: django

我使用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

但在我看来并不好......有人可以告诉你如何更好地写作吗?感谢

1 个答案:

答案 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