2

フォームの送信後に PDF を生成しています。「PDF が生成されました」にリダイレクトするか、フォームを含むページをリロードします。それを行う方法がわかりません。javascript/jquery で実行できると思いますが、それを行う方法が見つかりませんでした。

これは、pdf を生成するビューです。

def myview(response):
    resp = HttpResponse(content_type='application/pdf')
    result = generate_pdf('my_template.html', file_object=resp)
    return result
4

3 に答える 3

3

PDFファイルを作成しているのと同じビューからリダイレクトすることはできません。1つのオプションは、最初に成功ページを送信し、ダウンロードを開始した後です。

あなたの成功の見方:

def pdf_success(request):
    # View stuff
    return render_to_response('pdf.html', {}, context_instance=ctx)

pdf.htmlそして、これをテンプレートに追加する必要があります:

<meta http-equiv="REFRESH" content="0;url={% url "myview" %}">
于 2013-07-20T00:04:28.777 に答える
2

最初にその成功ビューを作成します。

def pdf_success(request):
    return render_to_response('pdf_success.html', {},
                              context_instance=RequestContext(request))

次に、成功後にリダイレクトを行います。

def myview(response):
    resp = HttpResponse(content_type='application/pdf')
    result = generate_pdf('my_template.html', file_object=resp)
    if result:
        return HttpResponseRedirect('/url/to/success/view')

アイデアを提供するだけです

于 2013-07-19T23:26:37.747 に答える
2

このスニペットから、カスタム デコレータを作成できます

 from functools import wraps
 from django.http import HttpResponsePermanentRedirect, HttpResponseRedirect

def redirect(url):
    """
    Executes a HTTP 302 redirect after the view finishes processing. If a value is 
    returned, it is ignored. Allows for the view url to be callable so the
    reverse() lookup can be used.

    @redirect('http://www.google.com/')
    def goto_google(request):
        pass

    @redirect(lambda: reverse('some_viewname'))
    def do_redirect(request):
        ...

    """
    def outer(f):
        @wraps(f)
        def inner(request, *args, **kwargs):
            f(request, *args, **kwargs)
            return HttpResponseRedirect(url if not callable(url) else url())
        return inner
    return outer




def permanent_redirect(url):
    """
    Executes a HTTP 301 (permanent) redirect after the view finishes processing. If a
    value is returned, it is ignored. Allows for the view url to be callable so the
    reverse() lookup can be used.

    @permanent_redirect('/another-url/')
    def redirect_view(request):
        ...

    @redirect(lambda: reverse('some_viewname'))
    def do_redirect(request):
        ...

    """
    def outer(f):
        @wraps(f)
        def inner(request, *args, **kwargs):
            f(request, *args, **kwargs)
            return HttpResponsePermanentRedirect(url if not callable(url) else url())
        return inner
    return outer

次の方法からこれらのいずれかを使用できます。

@redirect('http://stackoverflow.com')
def myview(response):
    resp = HttpResponse(content_type='application/pdf')
    result = generate_pdf('my_template.html', file_object=resp)
    return result

また:

    @permanent_redirect('http://stackoverflow.com')
    def myview(response):
        resp = HttpResponse(content_type='application/pdf')
        result = generate_pdf('my_template.html', file_object=resp)
        return result
于 2013-07-19T23:28:21.983 に答える