📜  django 打印设置 - Python (1)

📅  最后修改于: 2023-12-03 15:00:27.072000             🧑  作者: Mango

Django 打印设置

在 Django 中,我们可以很方便地设置和管理打印功能。可以通过 Django Admin 或在视图中使用打印功能。下面是一些有关打印设置的详细信息。

设置打印

Django 打印有两种类别:admin 打印和视图打印。你可以通过创建 PrintForm 或 PrintModelForm 来设置打印的功能。其中 PrintModelForm 只能使用在 admin 中。

在后台中设置打印

导入 PrintingInlinePrintModelForm 模型类,使用 inlinesform 属性。

from django.contrib import admin

from .models import Post, Category
from django_printing.admin import PrintingInline

admin.site.register(Category)
class PostAdmin(admin.ModelAdmin):
    inlines = [PrintingInline]
admin.site.register(Post, PostAdmin)

# 或者

from django_printing.forms import PrintModelForm

class PostForm(PrintModelForm):
    class Meta:
        model = Post
        fields = "__all__"
class PostAdmin(admin.ModelAdmin):
    form = PostForm

admin.site.register(Post, PostAdmin)
在视图中设置打印

Django 打印提供了 printing 装饰器来在视图中添加打印功能。只需在视图函数上添加该装饰器即可。

from django.shortcuts import render
from django.views.decorators.printing import printing

@printing
def hello(request):
   return render(request, 'hello.html', {})
使用打印功能

一个简单的例子来展示如何使用打印功能, 一个 PrintForm 表单和视图函数。

from django.shortcuts import render
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_POST

from django_printing.forms import PrintForm

def index(request):
    form = PrintForm()
    return render(request, 'index.html', {'form': form})

@csrf_exempt
@require_POST
def print_page(request):
    form = PrintForm(request.POST)
    if form.is_valid():
        html = form.cleaned_data['html']

        # Return HttpResponse with the generated PDF
        response = HttpResponse(content_type='application/pdf')
        response['Content-Disposition'] = 'attachment; filename="mypdf.pdf"'
        response.write(html)
        return response

    return HttpResponse('')


# index.html
{% extends 'base.html' %}

{% block content %}
  <form action="{% url 'print_page' %}" method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Print</button>
  </form>
{% endblock %}

在上述示例中,我们使用了 PrintForm 表单。在 print_page 视图函数中,如果表单验证通过,我们将生成的 PDF 作为 HttpResponse 返回。

许可证

Django-printing 使用 BSD 许可证。有关详细信息,请参阅 LICENSE 文件。

以上是 Django 打印设置的介绍。如果您想要更多的信息,请查阅官方文档。