Django 管理页面添加另存为 pdf 按钮



在下面的代码中,我通过自定义在管理页面中添加了一个另存为 pdf 按钮。当我单击另存为 pdf 按钮时,它应该以 pdf 格式显示当前页面的详细信息。我无法检索当前页面的单独数据以 pdf 形式显示它 (my_template.html(。怎么办?提前谢谢。

views.py

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
# Create your views here.
from django.http import HttpResponse
from django.views.generic import View
from django.db import models
from details.utils import render_to_pdf #created in step 4
from .models import UserDetails
class GeneratePdf(View): 
def get(self, request, *args, **kwargs):
#THIS IS THE PLACE WHERE I GET STUCK
all = {
"Name": "obj.name",
"Email": "obj.email",
"Address": "obj.address",
"DOB": "obj.dob",
"Gender": "obj.gender",
} 
pdf = render_to_pdf('my_template.html', all)
return HttpResponse(pdf, content_type='application/pdf')

urls.py

"""myapp URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/1.11/topics/http/urls/
Examples:
Function views
1. Add an import:  from my_app import views
2. Add a URL to urlpatterns:  url(r'^$', views.home, name='home')
Class-based views
1. Add an import:  from other_app.views import Home
2. Add a URL to urlpatterns:  url(r'^$', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.conf.urls import url, include
2. Add a URL to urlpatterns:  url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin
from details.views import GeneratePdf
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^pdf/$', GeneratePdf.as_view(),name='generatepdf'),
]

urls.py

from details.views import GeneratePdf
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^pdf/(?P<user_id>[0-9]+)/$', GeneratePdf.as_view(), name='generatepdf'),
]

views.py

from django.http import HttpResponse
from django.views.generic import View
from django.db import models
from details.utils import render_to_pdf
from .models import UserDetails
class GeneratePdf(View): 
def get(self, request, *args, **kwargs):
obj = UserDetails.objects.get(id=kwargs.get('user_id'))
all = {
"Name": obj.name,
"Email": obj.email,
"Address": obj.address,
"DOB": obj.dob,
"Gender": obj.gender,
} 
pdf = render_to_pdf('my_template.html', all)
return HttpResponse(pdf, content_type='application/pdf')

Anton Shurashov的答案是正确的。除此之外,在模板中,在所需标记中指定 URL 时,您应该知道访问它的数据的 ID。仅当数据保存在数据库中时,它才会起作用。

{%url 'generatepdf' adminform.form.instance.id  %}

"""adminform.form.instance.id"""是指示当前页面数据的 ID 的常规实例。

该按钮仅在保存数据后才可见。

最新更新