Django 1.11 使用来自应用程序的模板作为管理模板

Posted

技术标签:

【中文标题】Django 1.11 使用来自应用程序的模板作为管理模板【英文标题】:Django 1.11 use template from an app as admin template 【发布时间】:2018-02-14 09:44:57 【问题描述】:

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

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”错误

【问题讨论】:

能否贴出错误日志。 请不要将错误信息发布为图片。复制并粘贴文本。 您不需要在DIRS 中包含myapp/templates。只要myappINSTALLED_APPS 中,应用程序目录加载器就会对其进行检查。 【参考方案1】:

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') 

【讨论】:

信息不够。完整的错误消息应该告诉您 Django 尝试了哪些目录,哪些应该有助于调试问题。使用像 myappfile.html 这样的虚构名称会更难提供帮助。 我最终在 modelAdmin 中使用了 html

以上是关于Django 1.11 使用来自应用程序的模板作为管理模板的主要内容,如果未能解决你的问题,请参考以下文章

Django 1.11 如何从保存在 CMS 站点模型中的 HTML 中显示模板变量

Django 1.11:在 url 中的查询参数中浮动

Two Scoops of Django 1.11 章节2.1简译

Django - 来自模板标签内变量的字符串

Django 1.11 - 有没有办法将models.Model的字段组合到auth.models?

Django使用模板后无法找到静态资源文件