3

我有一个页面,用户可以在其中将自己的模板提交到 textarea 中,现在它需要这么简单。然而,由于它是用户生成的输入,我需要验证他们没有做破坏我的应用程序其余部分的事情,同时如果他们做错了什么,就他们做错了什么提供有用的反馈。

为了提供有用的反馈,我想要一些类似的东西来看看 django 为我提供了什么(使用 django 1.4):

在此处输入图像描述

尤其是上面那个位。我将用户模板放在 django 模板中,所以我不必自己验证语法错误和东西。看起来像这样:

try:
    template = get_template_from_string(user_input)
    template.render(context=Context())
except:
    do something to ouptut the error

需要渲染调用,否则根本不会抛出异常。

我已经尝试打印异常及其参数,但这只能提供非常有限的信息。我也尝试使用回溯,但它从不返回行号或模板中的任何内容,只返回 python 代码中引发异常的位置。我也无法使用谷歌找到任何东西,我通过 Django 源代码进行的搜索让我想知道实际的错误页面是在哪里生成的......


所以基本上我的问题是;我如何获得图像中显示的信息?

编辑 澄清:我希望用户能够制作模板,以便在发送电子邮件时可以使用这些模板。由于 Django 模板引擎已经存在,我想我会使用那个而不是其他东西。

使用此代码段和我自己对变量的一些解析使模板本身变得安全。到目前为止一切正常,除了对用户有用的调试消息。到目前为止,我所做的只是:“解析模板时出现问题,意外的块标签扩展”(例如),我希望它更像上面显示的图像。

4

1 回答 1

0

我刚遇到同样的问题。在我的情况下,不需要有这样一个详细的回溯。所以我这样做了,使用模型清洁方法

from django.core.exceptions import ValidationError
from django.core.urlresolvers import NoReverseMatch
from django.db import models
from django.template.base import Template, TemplateSyntaxError
from django.template.context import Context

class MyTemplate(models.Model):
    template = models.TextField()

    def clean(self):
        try:
            Template(self.tempalte).render(Context({}))
        except TemplateSyntaxError as tse:
            raise ValidationError('TemplateSyntaxError: %s' % tse)
        except NoReverseMatch as nrm:
            raise ValidationError('NoReverseMatch: %s' % nrm)
于 2013-09-20T17:36:09.253 回答