Javascript 生成pdf后重定向
我在表单提交后生成一个pdf,我想重定向到“pdf已生成”或用表单重新加载页面。我不知道如何做到这一点,我想可以用javascript/jquery实现,但我没有找到一种方法 这是生成pdf的视图:Javascript 生成pdf后重定向,javascript,python,django,Javascript,Python,Django,我在表单提交后生成一个pdf,我想重定向到“pdf已生成”或用表单重新加载页面。我不知道如何做到这一点,我想可以用javascript/jquery实现,但我没有找到一种方法 这是生成pdf的视图: def myview(response): resp = HttpResponse(content_type='application/pdf') result = generate_pdf('my_template.html', file_object=resp) retu
def myview(response):
resp = HttpResponse(content_type='application/pdf')
result = generate_pdf('my_template.html', file_object=resp)
return result
首先创建成功视图:
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')
为了给你一个想法,你可以创建一个定制的装饰器
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
或:
在创建PDF文件时不能从同一视图重定向,一个选项是先发送成功页面,然后开始下载 你的成功观:
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" %}">
我尝试了给定的解决方案,但没有成功。视图在未生成pdf的情况下被重定向。您尝试过我的解决方案吗?是的,但我无法解决问题。
<meta http-equiv="REFRESH" content="0;url={% url "myview" %}">