Django 1.11使用应用程序中的模板作为管理员模板

时间:2017-09-06 02:59:11

标签: django django-templates django-admin django-1.11 django-admin-actions

正如标题所说我在管理员视图中使用模板时遇到问题 这是我的工作树

project
 |-- project/
 |-- myapp/
     |-- templates/
         |-- admin/
             |-- file.html

settings.py

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'myapp/templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

ModelAdmin.py

class ModelAdmin(admin.ModelAdmin):
    actions = ['export']

    def export(self,request, queryset):
        paragraphs = ['first paragraph', 'second paragraph', 'third paragraph']
        pdfkit.from_file('file.html', 'out.pdf', paragraphs)
admin.site.register(Model, ModelAdmin)

但我得到“没有这样的文件:file.html”错误 enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

pdfkit不了解您的TEMPLATES设置。您需要提供相对于项目目录的路径。

pdfkit.from_file('myapp/templates/admin/file.html', 'out.pdf', paragraphs)

但是,这会将file.html视为html文件。如果它是您要呈现的Django模板,则可以使用render_to_stringfrom_string

from django.template.loader import render_to_string
html = render_to_string(request, 'admin/file.html', {...}) 
pdfkit.from_string(html, 'out.pdf')