0

私はあなたがこれをすることを許可されていない(またはあなたがそうしている)と言っているものを見たことがないと思いますが、あなたがすべきでない理由はありますか?うまくいくようです。

def get_page(request, topic_slug = 'home', tag_slug = None, form = None):

    #...

    if form is None:
        form = CommentForm()
    d = {'topic':topic, 'topics':topics, 'tags':tags, 'comments':comments, 'form':form}

    d.update(csrf(request))
    return render_to_response('page.html', d)

def save_comment(request, topic_slug):

    if request.method == 'POST':
        form = CommentForm(request.POST)

        if form.is_valid():
            #...save
        else:
            kwargs = {'topic_slug':topic_slug}
            kwargs['form'] =form
            return get_page(request, **kwargs) #<-------------- this

    return HttpResponseRedirect(reverse('get_page', kwargs = {'topic_slug':topic_slug}))
4

1 に答える 1

1

render_to_response単なるショートカットです。それを呼び出した結果はまだHttpResponseのインスタンスです。

証拠として、render_to_response()Djangoのソースにあるの宣言を参照してください。

def render_to_response(*args, **kwargs):
    """
    Returns a HttpResponse whose content is filled with the result of calling
    django.template.loader.render_to_string() with the passed arguments.
    """
    httpresponse_kwargs = {'mimetype': kwargs.pop('mimetype', None)}
    return HttpResponse(loader.render_to_string(*args, **kwargs),
        **httpresponse_kwargs)

かなり自明です。

これを書くことによって:

return get_page(request, **kwargs)

あなたは実際に次のようなことをします:

return render_to_response(request, kwargs)

(ただし、引数が少し変更されていkwargsます)。

于 2012-06-22T22:31:18.427 に答える