Предварительный просмотр django-комментариев на текущей странице - PullRequest
0 голосов
/ 12 июля 2011

Я использую 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 голосов
/ 12 июля 2011

Идея использования декораторов состоит в том, что вы можете избежать написания большого количества кода, который должен связываться с вашими данными после того, как они вышли из функции. И в этом случае вы делаете особые вещи, такие как использование модели 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...